]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
curl_multi_wait: call getsock before figuring out timeout
authorDaniel Stenberg <daniel@haxx.se>
Sat, 15 Sep 2018 22:16:49 +0000 (00:16 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 18 Sep 2018 13:39:28 +0000 (15:39 +0200)
.... since getsock may update the expiry timer.

Fixes #2996
Closes #3000

lib/multi.c

index 066adfed372a559199a64a0a7224b4535a561742..2faeaa74f9dee330ea8352f552fb11caebbc00c8 100644 (file)
@@ -1010,13 +1010,6 @@ CURLMcode curl_multi_wait(struct Curl_multi *multi,
   if(multi->in_callback)
     return CURLM_RECURSIVE_API_CALL;
 
-  /* If the internally desired timeout is actually shorter than requested from
-     the outside, then use the shorter time! But only if the internal timer
-     is actually larger than -1! */
-  (void)multi_timeout(multi, &timeout_internal);
-  if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms))
-    timeout_ms = (int)timeout_internal;
-
   /* Count up how many fds we have from the multi handle */
   data = multi->easyp;
   while(data) {
@@ -1041,6 +1034,13 @@ CURLMcode curl_multi_wait(struct Curl_multi *multi,
     data = data->next; /* check next handle */
   }
 
+  /* If the internally desired timeout is actually shorter than requested from
+     the outside, then use the shorter time! But only if the internal timer
+     is actually larger than -1! */
+  (void)multi_timeout(multi, &timeout_internal);
+  if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms))
+    timeout_ms = (int)timeout_internal;
+
   curlfds = nfds; /* number of internal file descriptors */
   nfds += extra_nfds; /* add the externally provided ones */