diff options
author | Krister Johansen <johansen@opensolaris.org> | 2010-06-17 15:46:27 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2010-06-17 15:46:27 +0200 |
commit | 43edcc4a2eb0aa1dec888cad7b2a66b3a4948026 (patch) | |
tree | fd496be821e4c34c4929f3a1d4e9a7ab6aa733d4 | |
parent | 01c2b397aa58a8727f3b12ca0808dc602fc4901e (diff) |
multi: unmark handle as used when no longer head of pipeline
-rw-r--r-- | lib/multi.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/multi.c b/lib/multi.c index af1db606c..b42f68d0f 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -2169,7 +2169,9 @@ static CURLcode addHandleToSendOrPendPipeline(struct SessionHandle *handle, struct connectdata *conn) { size_t pipeLen = conn->send_pipe->size + conn->recv_pipe->size; + struct curl_llist_element *sendhead = conn->send_pipe->head; struct curl_llist *pipeline; + CURLcode rc; if(!Curl_isPipeliningEnabled(handle) || pipeLen == 0) @@ -2182,7 +2184,17 @@ static CURLcode addHandleToSendOrPendPipeline(struct SessionHandle *handle, pipeline = conn->pend_pipe; } - return Curl_addHandleToPipeline(handle, pipeline); + rc = Curl_addHandleToPipeline(handle, pipeline); + + if (pipeline == conn->send_pipe && sendhead != conn->send_pipe->head) { + /* this is a new one as head, expire it */ + conn->writechannel_inuse = FALSE; /* not in use yet */ + infof(conn->data, "%p is at send pipe head!\n", + conn->send_pipe->head->ptr); + Curl_expire(conn->send_pipe->head->ptr, 1); + } + + return rc; } static int checkPendPipeline(struct connectdata *conn) |