diff --git a/channel.c b/channel.c
index 19f2a81facd16444f2429f8dfb27f20707561188..8a052852bbdad3bd529f381bf7930434870fec57 100644
--- a/channel.c
+++ b/channel.c
@@ -3298,11 +3298,14 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
 			res = AST_BRIDGE_RETRY;
 			break;
 		}
-		to = ast_tvdiff_ms(bridge_end, ast_tvnow());
-		if (to <= 0) {
-			res = AST_BRIDGE_RETRY;
-			break;
-		}
+		if (bridge_end.tv_sec) {
+			to = ast_tvdiff_ms(bridge_end, ast_tvnow());
+			if (to <= 0) {
+				res = AST_BRIDGE_RETRY;
+				break;
+			}
+		} else
+			to = -1;
 		who = ast_waitfor_n(cs, 2, &to);
 		if (!who) {
 			ast_log(LOG_DEBUG, "Nobody there, continuing...\n");