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:
parent
8fca5c2e69
commit
87fdfe770d
5
CHANGES
5
CHANGES
@ -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
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user