diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/multi.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/multi.c b/lib/multi.c index ef4038306..e4b336964 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -76,6 +76,8 @@ static bool isHandleAtHead(struct SessionHandle *handle,  static CURLMcode add_next_timeout(struct timeval now,                                    struct Curl_multi *multi,                                    struct SessionHandle *d); +static CURLMcode multi_timeout(struct Curl_multi *multi, +                               long *timeout_ms);  #ifdef DEBUGBUILD  static const char * const statename[]={ @@ -810,10 +812,17 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,    unsigned int nfds = 0;    unsigned int curlfds;    struct pollfd *ufds = NULL; +  long timeout_internal;    if(!GOOD_MULTI_HANDLE(multi))      return CURLM_BAD_HANDLE; +  /* If the internally desired timeout is actually shorter than requested from +     the outside, then use the shorter time! */ +  (void)multi_timeout(multi, &timeout_internal); +  if(timeout_internal < (long)timeout_ms) +    timeout_ms = (int)timeout_internal; +    /* Count up how many fds we have from the multi handle */    easy=multi->easy.next;    while(easy != &multi->easy) {  | 
