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
This commit is contained in:
Daniel Stenberg 2023-10-07 20:10:36 +02:00
parent 9243ed6f4b
commit 07008ee8ac
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2

View file

@ -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 */