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
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) &&
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 */