40 lines
1.2 KiB
Diff
40 lines
1.2 KiB
Diff
From 52e822173aa3cd4f610531d32fbf943f026cdca6 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Weißschuh <thomas@t-8ch.de>
|
|
Date: Sun, 3 Jul 2022 18:20:44 +0200
|
|
Subject: select: do not return fatal error on EINTR from poll()
|
|
|
|
The same was done for select() in 5912da25 but poll() was missed.
|
|
|
|
Bug: https://bugs.archlinux.org/task/75201
|
|
Reported-by: Alexandre Bury (gyscos at archlinux)
|
|
|
|
Ref: https://github.com/curl/curl/issues/8921
|
|
Ref: https://github.com/curl/curl/pull/8961
|
|
Ref: https://github.com/curl/curl/commit/5912da25#r77584294
|
|
|
|
Closes https://github.com/curl/curl/pull/9091
|
|
---
|
|
lib/select.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/lib/select.c b/lib/select.c
|
|
index c16358d56..2ac074677 100644
|
|
--- a/lib/select.c
|
|
+++ b/lib/select.c
|
|
@@ -310,8 +310,12 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms)
|
|
else
|
|
pending_ms = 0;
|
|
r = poll(ufds, nfds, pending_ms);
|
|
- if(r <= 0)
|
|
+ if(r <= 0) {
|
|
+ if((r == -1) && (SOCKERRNO == EINTR))
|
|
+ /* make EINTR from select or poll not a "lethal" error */
|
|
+ r = 0;
|
|
return r;
|
|
+ }
|
|
|
|
for(i = 0; i < nfds; i++) {
|
|
if(ufds[i].fd == CURL_SOCKET_BAD)
|
|
--
|
|
cgit v1.2.3-18-g5258
|
|
|