https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=9d7fd8d416e678b453fafff8590cd1ec7027c42b

commit 9d7fd8d416e678b453fafff8590cd1ec7027c42b
Author: Corinna Vinschen <[email protected]>
Date:   Tue Sep 7 11:14:09 2021 +0200

    Cygwin: pipes: handle signals and thread cancellation in blocking mode only
    
    Signed-off-by: Corinna Vinschen <[email protected]>

Diff:
---
 winsup/cygwin/fhandler_pipe.cc | 56 +++++++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc
index 8041a5d51..4bd807a09 100644
--- a/winsup/cygwin/fhandler_pipe.cc
+++ b/winsup/cygwin/fhandler_pipe.cc
@@ -301,21 +301,21 @@ fhandler_pipe::raw_read (void *ptr, size_t& len)
          CancelIo (get_handle ());
          if (waitret == WAIT_SIGNALED && io.Status != STATUS_CANCELLED)
            waitret = WAIT_OBJECT_0;
-         if (waitret == WAIT_OBJECT_0)
-           status = io.Status;
-       }
-      if (waitret == WAIT_CANCELED)
-       {
-         status = STATUS_THREAD_CANCELED;
-         break;
-       }
-      else if (waitret == WAIT_SIGNALED)
-       {
-         status = STATUS_THREAD_SIGNALED;
-         nbytes += io.Information;
-         break;
+
+         if (waitret == WAIT_CANCELED)
+           {
+             status = STATUS_THREAD_CANCELED;
+             break;
+           }
+         else if (waitret == WAIT_SIGNALED)
+           {
+             status = STATUS_THREAD_SIGNALED;
+             nbytes += io.Information;
+             break;
+           }
+         status = io.Status;
        }
-      else if (isclosed ())  /* A signal handler might have closed the fd. */
+      if (isclosed ())  /* A signal handler might have closed the fd. */
        {
          if (waitret == WAIT_OBJECT_0)
            set_errno (EBADF);
@@ -460,21 +460,21 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t 
len)
          CancelIo (get_handle ());
          if (waitret == WAIT_SIGNALED && io.Status != STATUS_CANCELLED)
            waitret = WAIT_OBJECT_0;
-         if (waitret == WAIT_OBJECT_0)
-           status = io.Status;
-       }
-      if (waitret == WAIT_CANCELED)
-       {
-         status = STATUS_THREAD_CANCELED;
-         break;
-       }
-      else if (waitret == WAIT_SIGNALED)
-       {
-         status = STATUS_THREAD_SIGNALED;
-         nbytes += io.Information;
-         break;
+
+         if (waitret == WAIT_CANCELED)
+           {
+             status = STATUS_THREAD_CANCELED;
+             break;
+           }
+         else if (waitret == WAIT_SIGNALED)
+           {
+             status = STATUS_THREAD_SIGNALED;
+             nbytes += io.Information;
+             break;
+           }
+         status = io.Status;
        }
-      else if (isclosed ())  /* A signal handler might have closed the fd. */
+      if (isclosed ())  /* A signal handler might have closed the fd. */
        {
          if (waitret == WAIT_OBJECT_0)
            set_errno (EBADF);

Reply via email to