1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -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:
Daniel Stenberg 2010-09-28 23:17:34 +02:00
parent 7e1a45e224
commit ed4eecc05e
2 changed files with 4 additions and 3 deletions

View File

@ -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:

View File

@ -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;