aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2013-12-02 15:33:32 +0100
committerDaniel Stenberg <daniel@haxx.se>2013-12-15 22:53:41 +0100
commitbe28223f350ebd5a07de86d28b98a129952ccc60 (patch)
treeeda18b3610fea61db51de91322105c8e59891b5b /lib
parent8e2d73bbde36066c67fe47f600355be788a5e1a8 (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.h2
-rw-r--r--lib/transfer.c5
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