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
diff --git a/docs/libcurl/curl_multi_wait.3 b/docs/libcurl/curl_multi_wait.3
index ad97d47..b14760b 100644
--- a/docs/libcurl/curl_multi_wait.3
+++ b/docs/libcurl/curl_multi_wait.3
@@ -43,6 +43,9 @@
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 @@
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 6506b5e..9388467 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1024,8 +1024,12 @@
++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;