Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2017-01-14 18:29:06 +0300
committerCorinna Vinschen <corinna@vinschen.de>2017-01-14 18:29:06 +0300
commit688d943a520cf79b04e67d890cdeeefaf90d269c (patch)
tree8390c0d9aa3e98cf7534146b9d3f446442edd37d
parent338ce06971647635ebeeab0abd2e15d3daf3fb31 (diff)
Always try to write complete incoming buffer on pipes and fifos
This patch fixes the following problem: Commit 9636c426 refactored the pipe code especially to make sure to call WriteFile only with chunks matching the maximum atomic write count. This accidentally introduced a small change in behaviour on blocking pipes due to the success case falling through into the error case. Rather then writing atomic chunks until all bytes are written, the code immediately broke from the loop after writing the first chunk, basically the same as in case of non-blocking writes. This behaviour is not compliant to POSIX which requires "Write requests to a pipe or FIFO [...] * If the O_NONBLOCK flag is clear, a write request may cause the thread to block, but on normal completion it shall return nbyte." Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/fhandler.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 9ab52ad07..a8fe3b692 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -2155,7 +2155,7 @@ fhandler_base_overlapped::raw_write (const void *ptr, size_t len)
case overlapped_success:
ptr = ((char *) ptr) + chunk;
nbytes += nbytes_now;
- /* fall through intentionally */
+ break;
case overlapped_error:
len = 0; /* terminate loop */
case overlapped_unknown: