From 513f050cbf1b9e1ac40e08d258e496272bde920f Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Sun, 14 Apr 2019 19:15:58 +0000 Subject: [PATCH] Cygwin: FIFO: fix the error checking in raw_read If the pipe is empty, we can get either ERROR_NO_DATA or ERROR_PIPE_LISTENING. --- winsup/cygwin/fhandler_fifo.cc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index 764420ffd..2da579b95 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -749,19 +749,16 @@ fhandler_fifo::raw_read (void *in_ptr, size_t& len) fifo_client_unlock (); return; } - /* In the duplex case with no data, we seem to get nread - == -1 with ERROR_PIPE_LISTENING on the first attempt to - read from the duplex pipe (fc_handler[0]), and nread == 0 - on subsequent attempts. */ + /* If the pipe is empty, we usually get nread == -1 with + ERROR_NO_DATA or ERROR_PIPE_LISTENING. An exception is + that in the duplex case we may get nread == 0 when we + attempt to read from the duplex pipe (fc_handler[0]). */ else if (nread < 0) switch (GetLastError ()) { case ERROR_NO_DATA: - break; case ERROR_PIPE_LISTENING: - if (_duplexer && i == 0) - break; - /* Fall through. */ + break; default: fifo_client_unlock (); goto errout; -- 2.43.5