* 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:
Christopher Faylor
2001-11-03 05:42:21 +00:00
parent 243a041bd0
commit c41570695a
5 changed files with 36 additions and 46 deletions

View File

@@ -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);