Changelog
Daniel Stenberg (19 Dec 2008)
+- curl_multi_timeout() could return a timeout value of 0 even though nothing
+ was actually ready to get done, as the internal time resolution is higher
+ than the returned millisecond timer. Therefore it could cause applications
+ running on fast processors to do short bursts of busy-loops.
+ curl_multi_timeout() will now only return 0 if the timeout is actually
+ alreay triggered.
+
- Using the libssh2 0.19 function libssh2_session_block_directions(), libcurl
now has an improved ability to do right when the multi interface (both
"regular" and multi_socket) is used for SCP and SFTP transfers. This should
o improved connection re-use for subsequent SCP and SFTP transfers
o multi interface does less busy-loops for SCP and SFTP transfers with libssh2
0.19 or later
+ o curl_multi_timeout() no longer returns timeout 0 when there's nothing to do
+ yet
This release includes the following known bugs:
if( CURLM_OK >= returncode )
update_timer(multi);
+
return returncode;
}
/* splay the lowest to the bottom */
multi->timetree = Curl_splay(tv_zero, multi->timetree);
- if(Curl_splaycomparekeys(multi->timetree->key, now) > 0)
+ if(Curl_splaycomparekeys(multi->timetree->key, now) > 0) {
/* some time left before expiration */
*timeout_ms = curlx_tvdiff(multi->timetree->key, now);
+ if(!*timeout_ms)
+ /*
+ * Since we only provide millisecond resolution on the returned value
+ * and the diff might be less than one millisecond here, we don't
+ * return zero as that may cause short bursts of busyloops on fast
+ * processors while the diff is still present but less than one
+ * millisecond! instead we return 1 until the time is ripe.
+ */
+ *timeout_ms=1;
+ }
else
/* 0 means immediately */
*timeout_ms = 0;