* 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.
This commit is contained in:
		| @@ -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, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user