]> granicus.if.org Git - curl/commitdiff
url: skip to-be-closed connections when pipelining (follow-up)
authorJay Satiro <raysatiro@yahoo.com>
Mon, 17 Oct 2016 06:44:39 +0000 (02:44 -0400)
committerJay Satiro <raysatiro@yahoo.com>
Mon, 17 Oct 2016 06:44:39 +0000 (02:44 -0400)
- Change back behavior so that pipelining is considered possible for
connections that have not yet reached the protocol level.

This is a follow-up to e5f0b1a which had changed the behavior of
checking if pipelining is possible to ignore connections that had
'bits.close' set. Connections that have not yet reached the protocol
level also have that bit set, and we need to consider pipelining
possible on those connections.

lib/url.c

index 5e1a0c32fa0b07dc5154285aa851865b427c6117..fbe10a8cbf513a083ef9457cae657ed982965a40 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2908,7 +2908,8 @@ static bool IsPipeliningPossible(const struct Curl_easy *handle,
                                  const struct connectdata *conn)
 {
   /* If a HTTP protocol and pipelining is enabled */
-  if((conn->handler->protocol & PROTO_FAMILY_HTTP) && !conn->bits.close) {
+  if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
+     (!conn->bits.protoconnstart || !conn->bits.close)) {
 
     if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) &&
        (handle->set.httpversion != CURL_HTTP_VERSION_1_0) &&
@@ -3283,8 +3284,8 @@ ConnectionExists(struct Curl_easy *data,
       pipeLen = check->send_pipe->size + check->recv_pipe->size;
 
       if(canPipeline) {
-        if(check->bits.close)
-            continue;
+        if(check->bits.protoconnstart && check->bits.close)
+          continue;
 
         if(!check->bits.multiplex) {
           /* If not multiplexing, make sure the pipe has only GET requests */