mirror of
https://github.com/git/git.git
synced 2025-03-20 09:43:14 +00:00
Merge branch 'sz/maint-curl-multi-timeout'
Sometimes curl_multi_timeout() function suggested a wrong timeout value when there is no file descriptors to wait on and the http transport ended up sleeping for minutes in select(2) system call. Detect this and reduce the wait timeout in such a case. * sz/maint-curl-multi-timeout: Fix potential hang in https handshake
This commit is contained in:
commit
23a50a1fb1
12
http.c
12
http.c
@ -631,6 +631,18 @@ void run_active_slot(struct active_request_slot *slot)
|
||||
FD_ZERO(&excfds);
|
||||
curl_multi_fdset(curlm, &readfds, &writefds, &excfds, &max_fd);
|
||||
|
||||
/*
|
||||
* It can happen that curl_multi_timeout returns a pathologically
|
||||
* long timeout when curl_multi_fdset returns no file descriptors
|
||||
* to read. See commit message for more details.
|
||||
*/
|
||||
if (max_fd < 0 &&
|
||||
(select_timeout.tv_sec > 0 ||
|
||||
select_timeout.tv_usec > 50000)) {
|
||||
select_timeout.tv_sec = 0;
|
||||
select_timeout.tv_usec = 50000;
|
||||
}
|
||||
|
||||
select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user