diff options
author | Mika Fischer <mika.fischer@zoopnet.de> | 2011-11-04 15:19:26 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-11-04 10:46:56 -0700 |
commit | eb56c82163487fe07ba04f2b365a557282cbd766 (patch) | |
tree | 61d97e76d9eb7415bf1db9e29ecffe6f2c88c2ca | |
parent | http.c: Use curl_multi_fdset to select on curl fds instead of just sleeping (diff) | |
download | tgif-eb56c82163487fe07ba04f2b365a557282cbd766.tar.xz |
http.c: Use timeout suggested by curl instead of fixed 50ms timeout
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>
-rw-r--r-- | http.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -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); } } |