From 4c2fde0ad86da2734c92a6707007153a9573f6d2 Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Thu, 14 Aug 2025 16:12:45 +0200 Subject: [PATCH] pause only recv and check only for that, also when running --- lib/multi.c | 32 +++++++++++++++++--------------- lib/vtls/openssl.c | 1 - 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/lib/multi.c b/lib/multi.c index 8ee0866cbc..1c09b14b6b 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -2438,22 +2438,24 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, case MSTATE_CONNECTING: /* awaiting a completion of an asynch TCP connect */ DEBUGASSERT(data->conn); - result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &connected); - if(connected && !result) { - if(!data->conn->bits.reuse && - Curl_conn_is_multiplex(data->conn, FIRSTSOCKET)) { - /* new connection, can multiplex, wake pending handles */ - process_pending_handles(data->multi); + if(!Curl_xfer_recv_is_paused(data)) { + result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &connected); + if(connected && !result) { + if(!data->conn->bits.reuse && + Curl_conn_is_multiplex(data->conn, FIRSTSOCKET)) { + /* new connection, can multiplex, wake pending handles */ + process_pending_handles(data->multi); + } + rc = CURLM_CALL_MULTI_PERFORM; + multistate(data, MSTATE_PROTOCONNECT); + } + else if(result) { + /* failure detected */ + multi_posttransfer(data); + multi_done(data, result, TRUE); + stream_error = TRUE; + break; } - rc = CURLM_CALL_MULTI_PERFORM; - multistate(data, MSTATE_PROTOCONNECT); - } - else if(result) { - /* failure detected */ - multi_posttransfer(data); - multi_done(data, result, TRUE); - stream_error = TRUE; - break; } break; diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c index 8d40fb0e00..e25c57304d 100644 --- a/lib/vtls/openssl.c +++ b/lib/vtls/openssl.c @@ -4603,7 +4603,6 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, #ifdef SSL_ERROR_WANT_RETRY_VERIFY if(SSL_ERROR_WANT_RETRY_VERIFY == detail) { CURL_TRC_CF(data, cf, "SSL_connect() -> want retry_verify"); - Curl_xfer_pause_send(data, TRUE); Curl_xfer_pause_recv(data, TRUE); return CURLE_AGAIN; }