From 07008ee8ac9b68b4c741c936918d6f9b66027f10 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 7 Oct 2023 20:10:36 +0200 Subject: [PATCH] multi: do CURLM_CALL_MULTI_PERFORM at two more places ... when it does a state transition but there is no particular socket or timer activity. This was made apparent when commit b5bb84c removed a superfluous timer expiry. Reported-by: Dan Fandrich. Fixes #12033 Closes #12056 --- lib/multi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/multi.c b/lib/multi.c index cefe11a530..ff753ac8ce 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -2125,9 +2125,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } if(!result) result = protocol_connect(data, &protocol_connected); - if(!result && !protocol_connected) + if(!result && !protocol_connected) { /* switch to waiting state */ multistate(data, MSTATE_PROTOCONNECTING); + rc = CURLM_CALL_MULTI_PERFORM; + } else if(!result) { /* protocol connect has completed, go WAITDO or DO */ multistate(data, MSTATE_DO); @@ -2214,6 +2216,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* DO was not completed in one function call, we must continue DOING... */ multistate(data, MSTATE_DOING); + rc = CURLM_CALL_MULTI_PERFORM; } /* after DO, go DO_DONE... or DO_MORE */ -- 2.47.2