From: Stefan Eissing Date: Mon, 16 Jun 2025 11:40:15 +0000 (+0200) Subject: multi: do no expire a blocked transfer X-Git-Tag: curl-8_15_0~247 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6270b41f92605514a95fc4e67e262596bddd8d89;p=thirdparty%2Fcurl.git multi: do no expire a blocked transfer When checking to expire a transfer with input data pending, also assess the blocked status and do not EXPIRE_RUN_NOW a transfer that is blocked on READ/WRITE. Follow-up to 62349e45a818e50b5cdcd017c149f9dc87fce9fe #17636 Closes #17639 --- diff --git a/lib/multi.c b/lib/multi.c index ef41650b32..79a0935c10 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1039,12 +1039,13 @@ void Curl_multi_getsock(struct Curl_easy *data, } - /* Waiting to receive with buffered input. + /* Unblocked and waiting to receive with buffered input. * Make transfer run again at next opportunity. */ - if((Curl_pollset_want_read(data, ps, data->conn->sock[FIRSTSOCKET]) && - Curl_conn_data_pending(data, FIRSTSOCKET)) || - (Curl_pollset_want_read(data, ps, data->conn->sock[SECONDARYSOCKET]) && - Curl_conn_data_pending(data, SECONDARYSOCKET))) { + if(!Curl_xfer_is_blocked(data) && + ((Curl_pollset_want_read(data, ps, data->conn->sock[FIRSTSOCKET]) && + Curl_conn_data_pending(data, FIRSTSOCKET)) || + (Curl_pollset_want_read(data, ps, data->conn->sock[SECONDARYSOCKET]) && + Curl_conn_data_pending(data, SECONDARYSOCKET)))) { CURL_TRC_M(data, "%s pollset[] has POLLIN, but there is still " "buffered input to consume -> EXPIRE_RUN_NOW", caller); Curl_expire(data, 0, EXPIRE_RUN_NOW);