aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2012-10-09 22:19:49 +0200
committerDaniel Stenberg <daniel@haxx.se>2012-10-09 22:19:49 +0200
commit8373ca3641ce793a868377600fb5fd7b8e8bf95a (patch)
treef830bd7bd23affe94bd9ed4d6f79974706729981
parent3644a3502751529db0b4f0e8bdc220526596d208 (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.35
-rw-r--r--lib/multi.c8
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;