aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-01-27 22:53:09 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-01-27 22:53:09 +0000
commit87fdfe770d054d06cd4548cd300866915caad4af (patch)
treec26557877d783fdb3a1601a58e0b80eb76b99c1a /lib
parent8fca5c2e6908c6dee497d4fe25b8aa66ef0ecdf8 (diff)
Dmitry Kurochkin: In "real world" testing I found more bugs in
pipelining. Broken connection is not restored and we get into infinite loop. It happens because of wrong is_in_pipeline values.
Diffstat (limited to 'lib')
-rw-r--r--lib/multi.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/multi.c b/lib/multi.c
index f52cce5df..5aac09e2d 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -871,6 +871,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(easy->easy_handle->state.is_in_pipeline) {
/* Head back to the CONNECT state */
multistate(easy, CURLM_STATE_CONNECT);
+ easy->easy_handle->state.is_in_pipeline = FALSE;
result = CURLM_CALL_MULTI_PERFORM;
easy->result = CURLE_OK;
}
@@ -1286,6 +1287,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
easy->easy_conn->bits.close = TRUE;
Curl_removeHandleFromPipeline(easy->easy_handle,
easy->easy_conn->recv_pipe);
+ easy->easy_handle->state.is_in_pipeline = FALSE;
if(CURL_SOCKET_BAD != easy->easy_conn->sock[SECONDARYSOCKET]) {
/* if we failed anywhere, we must clean up the secondary socket if
@@ -1309,6 +1311,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
easy->easy_conn->recv_pipe);
/* Check if we can move pending requests to send pipe */
checkPendPipeline(easy->easy_conn);
+ easy->easy_handle->state.is_in_pipeline = FALSE;
if(!retry) {
/* if the URL is a follow-location and not just a retried request
then figure out the URL here */