From c41570695a46cf3a4f1cf3f72db353c963f40f7e Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 3 Nov 2001 05:42:21 +0000 Subject: * 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. --- winsup/cygwin/pipe.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'winsup/cygwin/pipe.cc') diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc index 904dbd2..87d226b 100644 --- a/winsup/cygwin/pipe.cc +++ b/winsup/cygwin/pipe.cc @@ -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); -- cgit v1.1