* fhandler.cc (fhandler_base::read): Return just read ahead characters if slow
device. * fhandler.h (fhandler_base::set_eof): New virtual method. (fhandler_pipe::set_eof): New method. * pipe.cc (fhandler_pipe::fhandler_pipe): Clear saweof flag. (fhandler_pipe::read): Return immediately if hit eof. (fhandler_pipe::hit_eof): Return true if saweof flag is set. * select.cc (peek_pipe): Don't call PeekNamedPipe if we couldn't grab the guard mutex.
This commit is contained in:
@@ -26,7 +26,7 @@ static unsigned pipecount;
|
||||
static const NO_COPY char pipeid_fmt[] = "stupid_pipe.%u.%u";
|
||||
|
||||
fhandler_pipe::fhandler_pipe (DWORD devtype)
|
||||
: fhandler_base (devtype), guard (NULL), writepipe_exists(0),
|
||||
: fhandler_base (devtype), guard (NULL), saweof (false), writepipe_exists(0),
|
||||
orig_pid (0), id (0)
|
||||
{
|
||||
}
|
||||
@@ -52,8 +52,10 @@ fhandler_pipe::set_close_on_exec (int val)
|
||||
int __stdcall
|
||||
fhandler_pipe::read (void *in_ptr, size_t in_len)
|
||||
{
|
||||
if (hit_eof ())
|
||||
return 0;
|
||||
int res = this->fhandler_base::read (in_ptr, in_len);
|
||||
ReleaseMutex (guard);
|
||||
(void) ReleaseMutex (guard);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -72,6 +74,8 @@ fhandler_pipe::hit_eof ()
|
||||
{
|
||||
char buf[80];
|
||||
HANDLE ev;
|
||||
if (saweof)
|
||||
return 1;
|
||||
if (!orig_pid)
|
||||
return false;
|
||||
__small_sprintf (buf, pipeid_fmt, orig_pid, id);
|
||||
|
Reference in New Issue
Block a user