diff --git a/lib/core/dummy-callback.c b/lib/core/dummy-callback.c
index 8fd18be9c59f7db73de35288af2ac024003783a8..c99270fe4bddfdf32d64dc947a7c7e6a9a9ba2d2 100644
--- a/lib/core/dummy-callback.c
+++ b/lib/core/dummy-callback.c
@@ -155,7 +155,9 @@ lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
 						   LWS_WRITE_HTTP_FINAL);
 
 			/* always close after sending it */
-			return -1;
+			if (lws_http_transaction_completed(wsi))
+				return -1;
+			return 0;
 		}
 #endif
 #if defined(LWS_WITH_HTTP_PROXY)
@@ -459,10 +461,12 @@ lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
 			lwsl_debug("LWS_CALLBACK_CGI_TERMINATED: ending\n");
 			wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_CHUNK_END;
 			lws_callback_on_writable(wsi);
-			lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, 3);
+			lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, 10);
 			break;
 		}
-		return -1;
+		if (lws_http_transaction_completed(wsi))
+			return -1;
+		return 0;
 
 	case LWS_CALLBACK_CGI_STDIN_DATA:  /* POST body for stdin */
 		args = (struct lws_cgi_args *)in;