Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2008-12-23 21:22:33 +0300
committerChristopher Faylor <me@cgf.cx>2008-12-23 21:22:33 +0300
commit9a8597c13affb2f0e2a18cc808f9edf4d9b03d8c (patch)
treec056123f3070b52f60089b59bc7a88d103635cba /winsup/cygwin/fhandler.cc
parenta432f501008457d23ffe41e63f1549e0ef5bccd1 (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.cc24
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,