Skip to content

Commit

Permalink
http.c: Use timeout suggested by curl instead of fixed 50ms timeout
Browse files Browse the repository at this point in the history
Recent versions of curl can suggest a period of time the library user
should sleep and try again, when curl is blocked on reading or writing
(or connecting). Use this timeout instead of always sleeping for 50ms.

Signed-off-by: Mika Fischer <mika.fischer@zoopnet.de>
Helped-by: Daniel Stenberg <daniel@haxx.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Mika Fischer authored and Junio C Hamano committed Nov 4, 2011
1 parent 6f9dd67 commit eb56c82
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions http.c
Original file line number Diff line number Diff line change
Expand Up @@ -651,13 +651,29 @@ void run_active_slot(struct active_request_slot *slot)
}

if (slot->in_use && !data_received) {
#if LIBCURL_VERSION_NUM >= 0x070f04
long curl_timeout;
curl_multi_timeout(curlm, &curl_timeout);
if (curl_timeout == 0) {
continue;
} else if (curl_timeout == -1) {
select_timeout.tv_sec = 0;
select_timeout.tv_usec = 50000;
} else {
select_timeout.tv_sec = curl_timeout / 1000;
select_timeout.tv_usec = (curl_timeout % 1000) * 1000;
}
#else
select_timeout.tv_sec = 0;
select_timeout.tv_usec = 50000;
#endif

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+1, &readfds, &writefds, &excfds, &select_timeout);
}
}
Expand Down

0 comments on commit eb56c82

Please sign in to comment.