aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2016-02-19 11:18:33 -0800
committerJay Satiro <raysatiro@yahoo.com>2016-10-14 03:16:46 -0400
commite5f0b1ab43ad62eabc3d3a5254381254ed102c66 (patch)
tree0258ac9f7278d754d4457c780d201832bad50185 /lib/url.c
parent1671d84b38ac61f0852e8ff2915fef3346dc53f7 (diff)
url: skip to-be-closed connections when pipelining
No longer attempt to use "doomed" to-be-closed connections when pipelining. Prior to this change connections marked for deletion (e.g. timeout) would be erroneously used, resulting in sporadic crashes. As originally reported and fixed by Carlo Wood (origin unknown). Bug: https://github.com/curl/curl/issues/627 Reported-by: Rider Linden Closes https://github.com/curl/curl/pull/1075 Participation-by: nopjmp@users.noreply.github.com
Diffstat (limited to 'lib/url.c')
-rw-r--r--lib/url.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/url.c b/lib/url.c
index 74e9bf5c6..5e1a0c32f 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -2908,7 +2908,7 @@ 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) {
+ if((conn->handler->protocol & PROTO_FAMILY_HTTP) && !conn->bits.close) {
if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) &&
(handle->set.httpversion != CURL_HTTP_VERSION_1_0) &&
@@ -3283,6 +3283,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.multiplex) {
/* If not multiplexing, make sure the pipe has only GET requests */