diff options
author | Christopher Faylor <me@cgf.cx> | 2009-06-14 05:38:55 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2009-06-14 05:38:55 +0000 |
commit | 6a712635dd1de131634c5db1cd5b9221a6544ec6 (patch) | |
tree | 2b5b0975af5d2601d1d6e1ef16ff487c03b77715 /winsup/cygwin/fhandler.cc | |
parent | 792c564b27fc4b79f2e2936acc8e09ec3d1e7f39 (diff) | |
download | cygnal-6a712635dd1de131634c5db1cd5b9221a6544ec6.tar.gz cygnal-6a712635dd1de131634c5db1cd5b9221a6544ec6.tar.bz2 cygnal-6a712635dd1de131634c5db1cd5b9221a6544ec6.zip |
* fhandler.cc (fhandler_base::wait_overlapped): Honor nonblocking flag for
writes. Don't reset event handle when we see a ERROR_IO_PENDING.
* sigproc.cc (stopped_or_terminated): Use bool constants for consistency.
* wait.cc (wait4): Remove nonsensical comment.
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r-- | winsup/cygwin/fhandler.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index ec0d6d021..0d499ba9c 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -1684,8 +1684,13 @@ fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes) int res = 0; DWORD err; - if (inres || ((err = GetLastError ()) == ERROR_IO_PENDING)) - { + if (is_nonblocking ()) + { + err = GetLastError (); + res = inres; + } + else if (inres || ((err = GetLastError ()) == ERROR_IO_PENDING)) + { #ifdef DEBUGGING if (!get_overlapped ()) system_printf ("get_overlapped is zero?"); @@ -1745,7 +1750,8 @@ fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes) app. Sigh.). Must do this after WFMO and GetOverlappedResult or suffer occasional sporadic problems: http://cygwin.com/ml/cygwin/2008-08/msg00511.html */ - ResetEvent (get_overlapped ()->hEvent); + if (err != ERROR_IO_PENDING) + ResetEvent (get_overlapped ()->hEvent); if (writing && (err == ERROR_NO_DATA || err == ERROR_BROKEN_PIPE)) raise (SIGPIPE); return res; |