* 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.
This commit is contained in:
Christopher Faylor
2009-06-14 05:38:55 +00:00
parent 792c564b27
commit 6a712635dd
4 changed files with 21 additions and 7 deletions

View File

@ -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;