From d65321f93916e60f65b89d9bcb502341ea5c5939 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 18 May 2023 21:39:05 +0200 Subject: [PATCH] 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 --- lib/select.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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; } -- 2.47.3