On Wed, Nov 02, 2011 at 09:21:27PM +0100, Mika Fischer wrote: > Instead of sleeping unconditionally for a 50ms, when no data can be read > from the http connection(s), use curl_multi_fdset to obtain the actual > file descriptors of the open connections and use them in the select call. > This way, the 50ms sleep is interrupted when new data arrives. > --- > http.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/http.c b/http.c > index a4bc770..ae92318 100644 > --- a/http.c > +++ b/http.c > @@ -664,14 +664,14 @@ void run_active_slot(struct active_request_slot *slot) > } > > if (slot->in_use && !data_received) { > - max_fd = 0; > + max_fd = -1; > FD_ZERO(&readfds); > FD_ZERO(&writefds); > FD_ZERO(&excfds); > + curl_multi_fdset(curlm, &readfds, &writefds, &excfds, &max_fd); > select_timeout.tv_sec = 0; > select_timeout.tv_usec = 50000; > - select(max_fd, &readfds, &writefds, > - &excfds, &select_timeout); > + select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout); > } > } Do we still need to care about data_received? My understanding was that the code was originally trying to do: 1. Call curl, maybe get some data. 2. If we got data, then ask curl against immediately for some data. 3. Otherwise, sleep 50ms and then ask curl again. But now that we are actually selecting on the proper descriptors, it should now be safe to just do: 1. Call curl, maybe get some data. 2. Call select, which will wake immediately if curl is going to get data. At least that's my reading. I am working on unrelated patches that clean up the handling of data_received, but if it could go away altogether, that would be even simpler. -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html