diff --git a/src/backend.cmod b/src/backend.cmod
index f49645ef17c4bc76f3a91dd5a224ceaf701088dd..98a2d5115b3035f31679a24f9c41d8df13f3093f 100644
--- a/src/backend.cmod
+++ b/src/backend.cmod
@@ -2192,9 +2192,12 @@ PIKECLASS Backend
 	if (next_timeout->tv_sec < 0) {
 	  co_wait_interpreter(&me->backend_signal);
 	} else {
-	  co_wait_interpreter_timeout(&me->backend_signal,
-				      next_timeout->tv_sec,
-				      next_timeout->tv_usec * 1000);
+          struct timeval timeout = *next_timeout;
+          my_subtract_timeval(&timeout, &now);
+          if (timeout.tv_sec >= 0)
+            co_wait_interpreter_timeout(&me->backend_signal,
+                                        timeout.tv_sec,
+                                        timeout.tv_usec * 1000);
 	}
 	SWAP_IN_CURRENT_THREAD();
 	if (me->done_counter == old_done_counter) {