* 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:
@ -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;
|
||||
|
Reference in New Issue
Block a user