diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 7682cf1dd..a908136de 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +2010-02-14 Christopher Faylor + + * fhandler.cc (fhandler_base::setup_overlapped): Don't set signalled + state to true initially. + (fhandler_base::has_ongoing_io): Delete ill-advised function. + (fhandler_base::read_overlapped): Rely on caller having checked + nonblocking state. Don't attempt to (incorrectly) check it here. + (fhandler_base::write_overlapped): Remove call to has_ongoing_io. + * select.cc (peek_pipe): Ditto. + * fhandler.h (fhandler_base::has_ongoing_io): Delete declaration. + 2010-02-14 Christopher Faylor * regex/regcomp.c (xwcrtomb): Fix one explicable and one inexcplicable diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index 26a3ad8ee..8e8438314 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -1647,7 +1647,7 @@ fhandler_base::setup_overlapped (bool doit) if (doit) { set_overlapped (ov); - res = !!(ov->hEvent = CreateEvent (&sec_none_nih, true, true, NULL)); + res = !!(ov->hEvent = CreateEvent (&sec_none_nih, true, false, NULL)); } else { @@ -1751,29 +1751,12 @@ fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes, DWORD le return res; } -bool __stdcall -fhandler_base::has_ongoing_io (bool testit) -{ - if (testit && get_overlapped () && get_overlapped ()->hEvent - && WaitForSingleObject (get_overlapped ()->hEvent, 0) != WAIT_OBJECT_0) - { - set_errno (EAGAIN); - return true; - } - return false; -} - void __stdcall fhandler_base::read_overlapped (void *ptr, size_t& len) { DWORD nbytes; while (1) { - if (has_ongoing_io (is_nonblocking ())) - { - nbytes = (DWORD) -1; - break; - } bool res = ReadFile (get_handle (), ptr, len, &nbytes, get_overlapped ()); int wres = wait_overlapped (res, false, &nbytes); @@ -1789,11 +1772,6 @@ fhandler_base::write_overlapped (const void *ptr, size_t len) DWORD nbytes; while (1) { - if (has_ongoing_io (is_nonblocking ())) - { - nbytes = (DWORD) -1; - break; - } bool res = WriteFile (get_output_handle (), ptr, len, &nbytes, get_overlapped ()); int wres = wait_overlapped (res, true, &nbytes, (size_t) len); diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 8ef56e0df..d1130d4ea 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -311,7 +311,6 @@ class fhandler_base virtual char const *ttyname () { return get_name (); } virtual void __stdcall read (void *ptr, size_t& len) __attribute__ ((regparm (3))); virtual void __stdcall read_overlapped (void *ptr, size_t& len) __attribute__ ((regparm (3))); - virtual bool __stdcall has_ongoing_io (bool) __attribute__ ((regparm (2))); virtual ssize_t __stdcall write (const void *ptr, size_t len); virtual ssize_t __stdcall write_overlapped (const void *ptr, size_t len); virtual ssize_t __stdcall readv (const struct iovec *, int iovcnt, ssize_t tot = -1); diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index 64c3cdecd..e1906cb14 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -526,8 +526,6 @@ out: else if (fh->get_device () == FH_PIPER) select_printf ("%s, select for write on read end of pipe", fh->get_name ()); - else if (fh->has_ongoing_io (true)) - s->write_ready = false; else { IO_STATUS_BLOCK iosb = {0};