diff options
author | Daniel Stenberg <daniel@haxx.se> | 2012-10-09 22:19:49 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2012-10-09 22:19:49 +0200 |
commit | 8373ca3641ce793a868377600fb5fd7b8e8bf95a (patch) | |
tree | f830bd7bd23affe94bd9ed4d6f79974706729981 | |
parent | 3644a3502751529db0b4f0e8bdc220526596d208 (diff) |
curl_multi_wait: no wait if no descriptors to wait for
This is a minor change in behavior after having been pointed out by Mark
Tully and discussed on the list. Initially this case would internally
call poll() with no sockets and a timeout which would equal a sleep for
that specified time.
Bug: http://curl.haxx.se/mail/lib-2012-10/0076.html
Reported by: Mark Tully
-rw-r--r-- | docs/libcurl/curl_multi_wait.3 | 5 | ||||
-rw-r--r-- | lib/multi.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/docs/libcurl/curl_multi_wait.3 b/docs/libcurl/curl_multi_wait.3 index ad97d47c5..b14760bf3 100644 --- a/docs/libcurl/curl_multi_wait.3 +++ b/docs/libcurl/curl_multi_wait.3 @@ -43,6 +43,9 @@ similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call. On completion, if \fInumfds\fP is supplied, it will be populated with the number of file descriptors on which interesting events occured. +If no extra file descriptors are provided and libcurl has no file descriptor +to offer to wait for, this function will return immediately. + This function is encouraged to be used instead of select(3) when using the multi interface to allow applications to easier circumvent the common problem with 1024 maximum file descriptors. @@ -67,6 +70,6 @@ events such as the socket being clear to write without blocking. CURLMcode type, general libcurl multi interface error code. See \fIlibcurl-errors(3)\fP .SH AVAILABILITY -This function was added in libcurl 7.28.0 +This function was added in libcurl 7.28.0. .SH "SEE ALSO" .BR curl_multi_fdset "(3), " curl_multi_perform "(3)" diff --git a/lib/multi.c b/lib/multi.c index 6506b5ee4..938846769 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1024,8 +1024,12 @@ CURLMcode curl_multi_wait(CURLM *multi_handle, ++nfds; } - /* wait... */ - i = Curl_poll(ufds, nfds, timeout_ms); + if(nfds) + /* wait... */ + i = Curl_poll(ufds, nfds, timeout_ms); + else + i = 0; + free(ufds); if(ret) *ret = i; |