mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
multi: don't expire timeouts at disonnect or done
The functions Curl_disconnect() and Curl_done() are both used within the scope of a single request so they cannot be allowed to use Curl_expire(... 0) to kill all timeouts as there are some timeouts that are set before a request that are supposed to remain until the request is done. The timeouts are now instead cleared at curl_easy_cleanup() and when the multi state machine changes a handle to the complete state.
This commit is contained in:
parent
7e1a45e224
commit
ed4eecc05e
@ -1594,6 +1594,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
|
|||||||
/* Important: reset the conn pointer so that we don't point to memory
|
/* Important: reset the conn pointer so that we don't point to memory
|
||||||
that could be freed anytime */
|
that could be freed anytime */
|
||||||
easy->easy_conn = NULL;
|
easy->easy_conn = NULL;
|
||||||
|
|
||||||
|
Curl_expire(data, 0); /* stop all timers */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CURLM_STATE_MSGSENT:
|
case CURLM_STATE_MSGSENT:
|
||||||
|
@ -481,6 +481,8 @@ CURLcode Curl_close(struct SessionHandle *data)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Curl_expire(data, 0); /* shut off timers */
|
||||||
|
|
||||||
if(m)
|
if(m)
|
||||||
/* This handle is still part of a multi handle, take care of this first
|
/* This handle is still part of a multi handle, take care of this first
|
||||||
and detach this handle from there. */
|
and detach this handle from there. */
|
||||||
@ -2579,7 +2581,6 @@ CURLcode Curl_disconnect(struct connectdata *conn)
|
|||||||
NULL, Curl_scan_cache_used);
|
NULL, Curl_scan_cache_used);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Curl_expire(data, 0); /* shut off timers */
|
|
||||||
Curl_hostcache_prune(data); /* kill old DNS cache entries */
|
Curl_hostcache_prune(data); /* kill old DNS cache entries */
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -5131,8 +5132,6 @@ CURLcode Curl_done(struct connectdata **connp,
|
|||||||
conn = *connp;
|
conn = *connp;
|
||||||
data = conn->data;
|
data = conn->data;
|
||||||
|
|
||||||
Curl_expire(data, 0); /* stop timer */
|
|
||||||
|
|
||||||
if(conn->bits.done)
|
if(conn->bits.done)
|
||||||
/* Stop if Curl_done() has already been called */
|
/* Stop if Curl_done() has already been called */
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
|
Loading…
Reference in New Issue
Block a user