From 3ca360391a2045a222b36ac1f0e454a02d354d97 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 12 Dec 2008 12:04:10 +0000 Subject: [PATCH] Make the getoff all pipelines function only set _inuse to FALSE if the specified data pointer was head. --- lib/url.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/url.c b/lib/url.c index 0f25a9d3e..099a4a5af 100644 --- a/lib/url.c +++ b/lib/url.c @@ -2378,20 +2378,6 @@ int Curl_removeHandleFromPipeline(struct SessionHandle *handle, return 0; } -/* remove the specified connection from all (possible) pipelines and related - queues */ -void Curl_getoff_all_pipelines(struct SessionHandle *data, - struct connectdata *conn) -{ - if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && - conn->readchannel_inuse) - conn->readchannel_inuse = FALSE; - if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && - conn->writechannel_inuse) - conn->writechannel_inuse = FALSE; - Curl_removeHandleFromPipeline(data, conn->pend_pipe); -} - #if 0 /* this code is saved here as it is useful for debugging purposes */ static void Curl_printPipeline(struct curl_llist *pipeline) { @@ -2416,6 +2402,24 @@ static struct SessionHandle* gethandleathead(struct curl_llist *pipeline) return NULL; } +/* remove the specified connection from all (possible) pipelines and related + queues */ +void Curl_getoff_all_pipelines(struct SessionHandle *data, + struct connectdata *conn) +{ + bool recv_head = conn->readchannel_inuse && + (gethandleathead(conn->recv_pipe) == data); + + bool send_head = conn->writechannel_inuse && + (gethandleathead(conn->send_pipe) == data); + + if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && recv_head) + conn->readchannel_inuse = FALSE; + if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head) + conn->writechannel_inuse = FALSE; + Curl_removeHandleFromPipeline(data, conn->pend_pipe); +} + static void signalPipeClose(struct curl_llist *pipeline) { struct curl_llist_element *curr;