diff options
author | Christopher Faylor <me@cgf.cx> | 2008-12-23 21:22:33 +0300 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2008-12-23 21:22:33 +0300 |
commit | 9a8597c13affb2f0e2a18cc808f9edf4d9b03d8c (patch) | |
tree | c056123f3070b52f60089b59bc7a88d103635cba /winsup/cygwin/fhandler.cc | |
parent | a432f501008457d23ffe41e63f1549e0ef5bccd1 (diff) |
* fhandler.h (fhandler_base_setup_overlapped): Add new argument.
(fhandler_base::get_overlapped_buffer): Declare new function.
(fhandler_base::set_overlapped): Ditto.
(fhandler_pipe::overlapped): New variable.
(fhandler_pipe::get_overlapped): Rework to return contents of overlapped
variable.
(fhandler_pipe::set_overlapped): Set overlapped variable based on argument.
(fhandler_fifo::get_overlapped_buffer): Return pointer to io_status.
* fhandler.cc (handler_base::setup_overlapped): Set to overlapped pointer to
NULL if new doit parameter is false. Otherwise set up overlapped event as
usual.
(fhandler_base::wait_overlapped): Return inres if this isn't an overlapped
operation.
(fhandler_base::read_overlapped): Remove inappropriate asserts.
* pipe.cc (fhandler_pipe::fhandler_pipe): Zero overlapped element.
(struct pipesync): Delete.
(getov_result): Ditto.
(pipe_handler): Ditto.
(pipesync::pipesync): Ditto.
(fhandler_pipe::init): Don't set up pipesync thread. Just pass opened_properly
flag along to overlapped setup.
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r-- | winsup/cygwin/fhandler.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index b573e4eca..cb2877dd8 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -1661,11 +1661,22 @@ fhandler_base::fpathconf (int v) /* Overlapped I/O */ bool -fhandler_base::setup_overlapped () +fhandler_base::setup_overlapped (bool doit) { - OVERLAPPED *ov = get_overlapped (); + OVERLAPPED *ov = get_overlapped_buffer (); memset (ov, 0, sizeof (*ov)); - return (ov->hEvent = CreateEvent (&sec_none_nih, true, false, NULL)); + bool res; + if (doit) + { + set_overlapped (ov); + res = !!(ov->hEvent = CreateEvent (&sec_none_nih, true, false, NULL)); + } + else + { + set_overlapped (NULL); + res = false; + } + return res; } void @@ -1682,6 +1693,9 @@ fhandler_base::destroy_overlapped () int fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes) { + if (!get_overlapped ()) + return inres; + int res = 0; *bytes = (DWORD) -1; DWORD err; @@ -1753,10 +1767,6 @@ fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes) void fhandler_base::read_overlapped (void *ptr, size_t& len) { -#ifdef DEBUGGING - assert (get_overlapped ()); - assert (get_overlapped ()->hEvent); -#endif while (1) { bool res = ReadFile (get_handle (), ptr, len, (DWORD *) &len, |