diff options
author | Daniel Stenberg <daniel@haxx.se> | 2007-05-02 13:47:56 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2007-05-02 13:47:56 +0000 |
commit | 2f0539d8803e4f270c8584994f7fc8b90cd5e15c (patch) | |
tree | 7eb613105f59ee3533c26bcb880f1f32abaf2f7e | |
parent | 6f7d0a7cbd0578dc20a22279269a14a143d7e8ee (diff) |
- Set the timeout for easy handles to expire really soon after addition or
when CURLM_CALL_MULTI_PERFORM is returned from curl_multi_socket*/perform,
to make applications using only curl_multi_socket() to properly function
when adding easy handles "on the fly". Bug report and test app provided by
Michael Wallner.
-rw-r--r-- | CHANGES | 7 | ||||
-rw-r--r-- | RELEASE-NOTES | 3 | ||||
-rw-r--r-- | lib/multi.c | 19 |
3 files changed, 28 insertions, 1 deletions
@@ -6,6 +6,13 @@ Changelog +Daniel S (2 May 2007) +- Set the timeout for easy handles to expire really soon after addition or + when CURLM_CALL_MULTI_PERFORM is returned from curl_multi_socket*/perform, + to make applications using only curl_multi_socket() to properly function + when adding easy handles "on the fly". Bug report and test app provided by + Michael Wallner. + Dan F (30 April 2007) - Improved the test harness to allow running test servers on other than the default port numbers, allowing more than one test suite to run diff --git a/RELEASE-NOTES b/RELEASE-NOTES index f4084218c..210466433 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -33,6 +33,7 @@ This release includes the following bugfixes: o curl_easy_duphandle() crash o curl -V / curl_verion*() works even when GnuTLS is used on a system without a good random source + o curl_multi_socket() not "noticing" newly added handles This release includes the following known bugs: @@ -56,6 +57,6 @@ advice from friends like these: Song Ma, Dan Fandrich, Yang Tse, Jay Austin, Robert Iakobashvil, James Housley, Daniel Black, Steve Little, Sonia Subramanian, Peter O'Gorman, - Frank Hempel + Frank Hempel, Michael Wallner Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/multi.c b/lib/multi.c index 76614c760..4b42981e8 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -469,6 +469,14 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle, /* make the SessionHandle struct refer back to this struct */ easy->easy_handle->set.one_easy = easy; + /* Set the timeout for this handle to expire really soon so that it will + be taken care of even when this handle is added in the midst of operation + when only the curl_multi_socket() API is used. During that flow, only + sockets that time-out or have actions will be dealt with. Since this + handle has no action yet, we make sure it times out to get things to + happen. */ + Curl_expire(easy->easy_handle, 10); + /* increase the node-counter */ multi->num_easy++; @@ -1385,6 +1393,17 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, multi->num_msgs++; /* increase message counter */ } + if(CURLM_CALL_MULTI_PERFORM == result) + /* Set the timeout for this handle to expire really soon so that it will + be taken care of even when this handle is added in the midst of + operation when only the curl_multi_socket() API is used. During that + flow, only sockets that time-out or have actions will be dealt + with. Since this handle has no action yet, we make sure it times out to + get things to happen. Also, this makes it less important for callers of + the curl_multi_* functions to bother about the CURLM_CALL_MULTI_PERFORM + return code, as long as they deal with the timeouts properly. */ + Curl_expire(easy->easy_handle, 10); + return result; } |