Skip to content
Snippets Groups Projects
Commit be28223f authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

multi: add timer inaccuracy margin to timeout/connecttimeout

Since all systems have inaccuracy in the timeout handling it is
imperative that we add an inaccuracy margin to the general timeout and
connecttimeout handling with the multi interface. This way, when the
timeout fires we should be fairly sure that it has passed the timeout
value and will be suitably detected.

For cases where the timeout fire before the actual timeout, we would
otherwise consume the timeout action and still not run the timeout code
since the condition wasn't met.

Reported-by: He Qin
Bug: http://curl.haxx.se/bug/view.cgi?id=1298
parent 8e2d73bb
No related branches found
No related tags found
No related merge requests found
......@@ -30,6 +30,8 @@
#define MULTI_TIMEOUT_INACCURACY 3000
#endif
#define MULTI_TIMEOUT_INACCURACY_MS (MULTI_TIMEOUT_INACCURACY / 1000)
/*
* Prototypes for library-wide functions provided by multi.c
*/
......
......@@ -1309,10 +1309,11 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
Curl_pgrsStartNow(data);
if(data->set.timeout)
Curl_expire(data, data->set.timeout);
Curl_expire(data, data->set.timeout + MULTI_TIMEOUT_INACCURACY_MS);
if(data->set.connecttimeout)
Curl_expire(data, data->set.connecttimeout);
Curl_expire(data, data->set.connecttimeout +
MULTI_TIMEOUT_INACCURACY_MS);
/* In case the handle is re-used and an authentication method was picked
in the session we need to make sure we only use the one(s) we now
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment