From a1dc0932f42604d6bd51ebf13f668e8e6debf409 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 29 Sep 2001 01:23:06 +0000 Subject: [PATCH] * pipe.cc (fhandler_pipe::fixup_after_fork): New method. * fhandler.h (fhandler_pipe::fixup_after_fork): Declare new method. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/fhandler.h | 1 + winsup/cygwin/pipe.cc | 22 ++++++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index a9718b3e6..a2783de57 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +Fri Sep 28 21:18:50 2001 Christopher Faylor + + * pipe.cc (fhandler_pipe::fixup_after_fork): New method. + * fhandler.h (fhandler_pipe::fixup_after_fork): Declare new method. + Fri Sep 28 03:23:04 2001 Christopher Faylor * passwd.cc (read_etc_passwd): Bother with unlocking when not diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index ed9ca350b..8f3368e78 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -452,6 +452,7 @@ public: int close (); void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);} int dup (fhandler_base *child); + void fixup_after_fork (HANDLE); bool hit_eof (); friend int make_pipe (int fildes[2], unsigned int psize, int mode); }; diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc index 1166b511d..03af86228 100644 --- a/winsup/cygwin/pipe.cc +++ b/winsup/cygwin/pipe.cc @@ -63,9 +63,7 @@ int fhandler_pipe::close () if (guard) CloseHandle (guard); if (writepipe_exists) -{debug_printf ("writepipe_exists closed"); CloseHandle (writepipe_exists); -} return res; } @@ -83,6 +81,16 @@ fhandler_pipe::hit_eof () return ev == NULL; } +void +fhandler_pipe::fixup_after_fork (HANDLE parent) +{ + this->fhandler_base::fixup_after_fork (parent); + if (guard) + fork_fixup (parent, guard, "guard"); + if (writepipe_exists) + fork_fixup (parent, writepipe_exists, "guard"); +} + int fhandler_pipe::dup (fhandler_base *child) { @@ -96,14 +104,20 @@ fhandler_pipe::dup (fhandler_base *child) ftp->guard = NULL; else if (!DuplicateHandle (hMainProc, guard, hMainProc, &ftp->guard, 0, 1, DUPLICATE_SAME_ACCESS)) - return -1; + { + debug_printf ("couldn't duplicate guard %p, %E", guard); + return -1; + } if (writepipe_exists == NULL) ftp->writepipe_exists = NULL; else if (!DuplicateHandle (hMainProc, writepipe_exists, hMainProc, &ftp->writepipe_exists, 0, 1, DUPLICATE_SAME_ACCESS)) - return -1; + { + debug_printf ("couldn't duplicate writepipe_exists %p, %E", writepipe_exists); + return -1; + } ftp->id = id; ftp->orig_pid = orig_pid;