mirror of
https://github.com/curl/curl.git
synced 2026-08-02 10:30:28 +03:00
url: fix connection reuse for HTTP/2 upgrades
Normally, when a connection's filters have all connected, the multiplex status is determined. However, HTTP/2 Upgrade: requests will only do this when the first server response has been received. The current connection reuse mechanism does not accomodate that and when the time between connect and response is large enough, connection reuse may not happen as desired. See test case 2405 failures, such as in https://github.com/curl/curl/actions/runs/10629497461/job/29467166451 Add 'conn->bits.asks_multiplex' as indicator that a connection is still being evaluated for mulitplexing, so that new transfers may wait on this to be cleared. Closes #14739
This commit is contained in:
parent
76212cbf3e
commit
00ef607326
4 changed files with 8 additions and 1 deletions
|
|
@ -3439,6 +3439,7 @@ static CURLcode http_on_response(struct Curl_easy *data,
|
|||
/* Switching to HTTP/2, where we will get more responses */
|
||||
infof(data, "Received 101, Switching to HTTP/2");
|
||||
k->upgr101 = UPGR101_RECEIVED;
|
||||
data->conn->bits.asks_multiplex = FALSE;
|
||||
/* We expect more response from HTTP/2 later */
|
||||
k->header = TRUE;
|
||||
k->headerline = 0; /* restart the header line counter */
|
||||
|
|
@ -3485,6 +3486,7 @@ static CURLcode http_on_response(struct Curl_easy *data,
|
|||
if(k->upgr101 == UPGR101_H2) {
|
||||
/* A requested upgrade was denied, poke the multi handle to possibly
|
||||
allow a pending pipewait to continue */
|
||||
data->conn->bits.asks_multiplex = FALSE;
|
||||
Curl_multi_connchanged(data->multi);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue