aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/fhandler/pipe.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler/pipe.cc')
-rw-r--r--winsup/cygwin/fhandler/pipe.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler/pipe.cc b/winsup/cygwin/fhandler/pipe.cc
index 852076c..c686df6 100644
--- a/winsup/cygwin/fhandler/pipe.cc
+++ b/winsup/cygwin/fhandler/pipe.cc
@@ -518,8 +518,9 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
raise (SIGPIPE);
goto out;
}
- else
- cygwait (select_sem, 10, cw_cancel);
+ /* Break out on completion */
+ if (waitret == WAIT_OBJECT_0)
+ break;
/* If we got a timeout in the blocking case, and we already
did a short write, we got a signal in the previous loop. */
if (waitret == WAIT_TIMEOUT && short_write_once)
@@ -527,6 +528,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
waitret = WAIT_SIGNALED;
break;
}
+ cygwait (select_sem, 10, cw_cancel);
}
/* Loop in case of blocking write or SA_RESTART */
while (waitret == WAIT_TIMEOUT || waitret == WAIT_SIGNALED);