From: Daniel Stenberg Date: Sat, 15 Sep 2018 22:16:49 +0000 (+0200) Subject: curl_multi_wait: call getsock before figuring out timeout X-Git-Tag: curl-7_62_0~169 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ec5d0991ccf1e04fc384b312fc1b24c21259c0f1;p=thirdparty%2Fcurl.git curl_multi_wait: call getsock before figuring out timeout .... since getsock may update the expiry timer. Fixes #2996 Closes #3000 --- diff --git a/lib/multi.c b/lib/multi.c index 066adfed37..2faeaa74f9 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -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 */