Unverified Commit ec5d0991 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

curl_multi_wait: call getsock before figuring out timeout

.... since getsock may update the expiry timer.

Fixes #2996
Closes #3000
parent ef38059f
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -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 */