Merge branch 'sz/maint-curl-multi-timeout' into maint
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. A workaround has been added for this. * sz/maint-curl-multi-timeout: Fix potential hang in https handshake
This commit is contained in:
commit
8b56a47022
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…
Reference in New Issue
Block a user