diff options
author | Daniel Stenberg <daniel@haxx.se> | 2008-01-27 22:53:09 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2008-01-27 22:53:09 +0000 |
commit | 87fdfe770d054d06cd4548cd300866915caad4af (patch) | |
tree | c26557877d783fdb3a1601a58e0b80eb76b99c1a /lib | |
parent | 8fca5c2e6908c6dee497d4fe25b8aa66ef0ecdf8 (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.c | 3 |
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 */ |