diff options
author | Daniel Stenberg <daniel@haxx.se> | 2013-12-02 15:33:32 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2013-12-15 22:53:41 +0100 |
commit | be28223f350ebd5a07de86d28b98a129952ccc60 (patch) | |
tree | eda18b3610fea61db51de91322105c8e59891b5b /lib | |
parent | 8e2d73bbde36066c67fe47f600355be788a5e1a8 (diff) |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/multiif.h | 2 | ||||
-rw-r--r-- | lib/transfer.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/multiif.h b/lib/multiif.h index e61c5c6f2..15163da98 100644 --- a/lib/multiif.h +++ b/lib/multiif.h @@ -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 */ diff --git a/lib/transfer.c b/lib/transfer.c index 533e394b6..e3194415b 100644 --- a/lib/transfer.c +++ b/lib/transfer.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 |