From: Antoine Pitrou Date: Thu, 18 May 2023 19:39:05 +0000 (+0200) Subject: select: avoid returning an error on EINTR from select() or poll() X-Git-Tag: curl-8_1_1~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d65321f93916e60f65b89d9bcb502341ea5c5939;p=thirdparty%2Fcurl.git select: avoid returning an error on EINTR from select() or poll() This was already done for the poll() and select() calls made directly from Curl_poll(), but was missed in Curl_wait_ms(), which is called when there are no fds to wait on. Fixes #11135 Closes #11143 --- diff --git a/lib/select.c b/lib/select.c index 61cce619b4..cae9beb6c7 100644 --- a/lib/select.c +++ b/lib/select.c @@ -61,8 +61,8 @@ * for the intended use of this function in the library. * * Return values: - * -1 = system call error, invalid timeout value, or interrupted - * 0 = specified timeout has elapsed + * -1 = system call error, or invalid timeout value + * 0 = specified timeout has elapsed, or interrupted */ int Curl_wait_ms(timediff_t timeout_ms) { @@ -99,8 +99,13 @@ int Curl_wait_ms(timediff_t timeout_ms) } #endif /* HAVE_POLL_FINE */ #endif /* USE_WINSOCK */ - if(r) - r = -1; + if(r) { + if((r == -1) && (SOCKERRNO == EINTR)) + /* make EINTR from select or poll not a "lethal" error */ + r = 0; + else + r = -1; + } return r; }