summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/pipe.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2001-09-29 01:23:06 +0000
committerChristopher Faylor <me@cgf.cx>2001-09-29 01:23:06 +0000
commita1dc0932f42604d6bd51ebf13f668e8e6debf409 (patch)
tree72da95ada5c8d6b1956697021dfff362e4e64351 /winsup/cygwin/pipe.cc
parente19332c6677f4e1a41387102ded9010a2b99229f (diff)
downloadcygnal-a1dc0932f42604d6bd51ebf13f668e8e6debf409.tar.gz
cygnal-a1dc0932f42604d6bd51ebf13f668e8e6debf409.tar.bz2
cygnal-a1dc0932f42604d6bd51ebf13f668e8e6debf409.zip
* pipe.cc (fhandler_pipe::fixup_after_fork): New method.
* fhandler.h (fhandler_pipe::fixup_after_fork): Declare new method.
Diffstat (limited to 'winsup/cygwin/pipe.cc')
-rw-r--r--winsup/cygwin/pipe.cc22
1 files changed, 18 insertions, 4 deletions
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;