From ec5d0991ccf1e04fc384b312fc1b24c21259c0f1 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 16 Sep 2018 00:16:49 +0200 Subject: curl_multi_wait: call getsock before figuring out timeout .... since getsock may update the expiry timer. Fixes #2996 Closes #3000 --- lib/multi.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/multi.c b/lib/multi.c index 066adfed3..2faeaa74f 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 */ -- cgit v1.2.3