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>
This commit is contained in:
parent
338ce06971
commit
688d943a52
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue