summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-07-29 08:50:25 +0200
committerDaniel Stenberg <daniel@haxx.se>2019-07-29 14:57:57 +0200
commita2ab576768442f669040837c7f0667e672cf7d48 (patch)
tree54f9e520532d86bc00561e3dc51c01a838d4f7a7
parent802aa5ae27ce755b94477976397502dc056227c4 (diff)
downloadcurl-a2ab576768442f669040837c7f0667e672cf7d48.tar.gz
curl: avoid uncessary libcurl timeouts (in parallel mode)
When curl_multi_wait() returns OK without file descriptors to wait for, it might already have done a long timeout. Closes #4159
-rw-r--r--src/tool_operate.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/tool_operate.c b/src/tool_operate.c
index 68cd11c56..18adf1046 100644
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@ -1972,14 +1972,17 @@ static CURLcode parallel_transfers(struct GlobalConfig *global,
while(!done && !mcode && still_running) {
int numfds;
+ struct timeval before = tvnow();
+ long delta;
mcode = curl_multi_wait(multi, NULL, 0, 1000, &numfds);
+ delta = tvdiff(tvnow(), before);
if(!mcode) {
- if(!numfds) {
+ if(!numfds && (delta < 30)) {
long sleep_ms;
- /* If it returns without any filedescriptor instantly, we need to
+ /* If it returns without any file descriptor instantly, we need to
avoid busy-looping during periods where it has nothing particular
to wait for */
curl_multi_timeout(multi, &sleep_ms);