From 704068e4f994aa98ad4eb4bfc4a2ca3324cb4a00 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 15 Jan 2019 09:58:30 +0100 Subject: Cygwin: signalfd: drop incorrect handling of EINTR in read(2) In case sigwait_common returns EINTR, read wrongly ignores it, so read can't be interrupt by a signal. Fix that. Signed-off-by: Corinna Vinschen --- winsup/cygwin/fhandler_signalfd.cc | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/winsup/cygwin/fhandler_signalfd.cc b/winsup/cygwin/fhandler_signalfd.cc index 1bb0d1422..1547c64cd 100644 --- a/winsup/cygwin/fhandler_signalfd.cc +++ b/winsup/cygwin/fhandler_signalfd.cc @@ -112,13 +112,11 @@ fhandler_signalfd::read (void *ptr, size_t& len) ? (PLARGE_INTEGER) &poll : NULL); if (ret == -1) { - if (curlen == 0) - { - if (get_errno () == EINTR && curlen == 0) - continue; - set_errno (old_errno); - } - len = curlen ?: (size_t) -1; + /* If we already read a signal so the buffer isn't empty, just + return success. */ + if (curlen > 0) + break; + len = -1; return; } __try -- cgit v1.2.3