+Fri Sep 28 21:18:50 2001 Christopher Faylor <cgf@cygnus.com>
+
+ * 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 <cgf@cygnus.com>
* passwd.cc (read_etc_passwd): Bother with unlocking when not
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);
};
if (guard)
CloseHandle (guard);
if (writepipe_exists)
-{debug_printf ("writepipe_exists closed");
CloseHandle (writepipe_exists);
-}
return res;
}
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)
{
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;