1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

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.
This commit is contained in:
Daniel Stenberg 2008-01-27 22:53:09 +00:00
parent 8fca5c2e69
commit 87fdfe770d
2 changed files with 8 additions and 0 deletions

View File

@ -6,6 +6,11 @@
Changelog Changelog
Daniel S (27 Jan 2008)
- 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.
Daniel S (26 Jan 2008) Daniel S (26 Jan 2008)
- Kevin Reed filed bug report #1879375 - Kevin Reed filed bug report #1879375
(http://curl.haxx.se/bug/view.cgi?id=1879375) which describes how libcurl (http://curl.haxx.se/bug/view.cgi?id=1879375) which describes how libcurl

View File

@ -871,6 +871,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(easy->easy_handle->state.is_in_pipeline) { if(easy->easy_handle->state.is_in_pipeline) {
/* Head back to the CONNECT state */ /* Head back to the CONNECT state */
multistate(easy, CURLM_STATE_CONNECT); multistate(easy, CURLM_STATE_CONNECT);
easy->easy_handle->state.is_in_pipeline = FALSE;
result = CURLM_CALL_MULTI_PERFORM; result = CURLM_CALL_MULTI_PERFORM;
easy->result = CURLE_OK; easy->result = CURLE_OK;
} }
@ -1286,6 +1287,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
easy->easy_conn->bits.close = TRUE; easy->easy_conn->bits.close = TRUE;
Curl_removeHandleFromPipeline(easy->easy_handle, Curl_removeHandleFromPipeline(easy->easy_handle,
easy->easy_conn->recv_pipe); easy->easy_conn->recv_pipe);
easy->easy_handle->state.is_in_pipeline = FALSE;
if(CURL_SOCKET_BAD != easy->easy_conn->sock[SECONDARYSOCKET]) { if(CURL_SOCKET_BAD != easy->easy_conn->sock[SECONDARYSOCKET]) {
/* if we failed anywhere, we must clean up the secondary socket if /* 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); easy->easy_conn->recv_pipe);
/* Check if we can move pending requests to send pipe */ /* Check if we can move pending requests to send pipe */
checkPendPipeline(easy->easy_conn); checkPendPipeline(easy->easy_conn);
easy->easy_handle->state.is_in_pipeline = FALSE;
if(!retry) { if(!retry) {
/* if the URL is a follow-location and not just a retried request /* if the URL is a follow-location and not just a retried request
then figure out the URL here */ then figure out the URL here */