mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
- 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.
This commit is contained in:
parent
6f7d0a7cbd
commit
2f0539d880
7
CHANGES
7
CHANGES
@ -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
|
||||
|
@ -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)
|
||||
|
19
lib/multi.c
19
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user