* 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