[newlib-cygwin] Cygwin: select: Set errno when peek() returns -1
Takashi Yano
tyan0@sourceware.org
Sun Apr 19 10:34:36 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=6a588c29b562c6da08061f68d71733c78fbfefc3
commit 6a588c29b562c6da08061f68d71733c78fbfefc3
Author: Takashi Yano <takashi.yano@nifty.ne.jp>
Date: Sat Apr 18 04:31:15 2026 +0900
Cygwin: select: Set errno when peek() returns -1
Currently, poll() sometimes returns -1 with errno == 0 if the fd is
not opened. This is due to lack of setting errno when peek() fails.
This patch ensure to set errno to thread_errno if peek() returns -1.
Addresses: https://cygwin.com/pipermail/cygwin/2026-April/259602.html
Fixes: 8382778cdb57 ("Cygwin: console: fix select() behaviour")
Reported-by: Nahor <nahor.j+cygwin@gmail.com>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
Diff:
---
winsup/cygwin/release/3.6.8 | 4 ++++
winsup/cygwin/select.cc | 5 ++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/winsup/cygwin/release/3.6.8 b/winsup/cygwin/release/3.6.8
index dc7103c67..5199ad86b 100644
--- a/winsup/cygwin/release/3.6.8
+++ b/winsup/cygwin/release/3.6.8
@@ -22,3 +22,7 @@ Fixes:
Addresses: https://github.com/git-for-windows/git/issues/5632
- Fix pty bugs regarding GDB with pty.
+
+- Add missing errno setting on error that poll() is called for closed
+ file descriptor.
+ Addresses: https://cygwin.com/pipermail/cygwin/2026-April/259602.html
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 8a94ac076..523c46ee6 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -561,7 +561,10 @@ select_stuff::poll (fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
{
int ret = s->peek ? s->peek (s, true) : 1;
if (ret < 0)
- return -1;
+ {
+ set_errno (s->thread_errno);
+ return -1;
+ }
n += (ret > 0) ? set_bits (s, readfds, writefds, exceptfds) : 0;
}
return n;
More information about the Cygwin-cvs
mailing list