From: Daniel Stenberg Date: Thu, 30 Apr 2015 13:25:06 +0000 (+0200) Subject: http2: leave WAITPERFORM when conn is multiplexed X-Git-Tag: curl-7_43_0~150 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4b8b39881e2d3304abbfb051a8c31f55ba7f550;p=thirdparty%2Fcurl.git http2: leave WAITPERFORM when conn is multiplexed No need to wait for our "spot" like for pipelining --- diff --git a/lib/http2.c b/lib/http2.c index 42f31290f2..b8329d880c 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -1120,6 +1120,7 @@ CURLcode Curl_http2_setup(struct connectdata *conn) httpc->upload_mem = NULL; httpc->upload_len = 0; + conn->bits.multiplex = TRUE; /* at least potentially multiplexed */ conn->httpversion = 20; conn->bundle->server_supports_pipelining = TRUE; diff --git a/lib/multi.c b/lib/multi.c index a095238d59..5595bbd1f8 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1429,9 +1429,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, case CURLM_STATE_WAITPERFORM: /* Wait for our turn to PERFORM */ - if(!data->easy_conn->readchannel_inuse && - isHandleAtHead(data, - data->easy_conn->recv_pipe)) { + if((!data->easy_conn->readchannel_inuse && + isHandleAtHead(data, + data->easy_conn->recv_pipe)) || + data->easy_conn->bits.multiplex) { /* Grab the channel */ data->easy_conn->readchannel_inuse = TRUE; multistate(data, CURLM_STATE_PERFORM); diff --git a/lib/urldata.h b/lib/urldata.h index 25fb98fe5f..b09177e7ab 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -530,6 +530,7 @@ struct ConnectBits { bool bound; /* set true if bind() has already been done on this socket/ connection */ bool type_set; /* type= was used in the URL */ + bool multiplex; /* connection is multiplexed */ }; struct hostname {