OSDN Git Service

* dtable.h (dtable::in_vfork_cleanup): New function. True if vfork cleanup
authorcgf <cgf>
Fri, 3 Jan 2003 06:20:22 +0000 (06:20 +0000)
committercgf <cgf>
Fri, 3 Jan 2003 06:20:22 +0000 (06:20 +0000)
needed.
* dtable.cc (dtable::vfork_parent_restore): Remove assertion.
* pipe.cc (fhandler_pipe::close): Don't close read_state during fork_fixup
since it wasn't inherited.

winsup/cygwin/ChangeLog
winsup/cygwin/dtable.cc
winsup/cygwin/dtable.h
winsup/cygwin/exceptions.cc
winsup/cygwin/pipe.cc

index 513dd82..2c2e9eb 100644 (file)
@@ -1,3 +1,11 @@
+2003-01-03  Christopher Faylor  <cgf@redhat.com>
+
+       * dtable.h (dtable::in_vfork_cleanup): New function.  True if vfork
+       cleanup needed.
+       * dtable.cc (dtable::vfork_parent_restore): Remove assertion.
+       * pipe.cc (fhandler_pipe::close): Don't close read_state during
+       fork_fixup since it wasn't inherited.
+
 2003-01-01  Christopher Faylor  <cgf@redhat.com>
 
        * passwd.cc (getpwuid_r32): Revert previous change.
index be3e0da..7b8e827 100644 (file)
@@ -675,7 +675,6 @@ dtable::vfork_parent_restore ()
 
   close_all_files ();
   fhandler_base **deleteme = fds;
-  assert (fds_on_hold != NULL);
   fds = fds_on_hold;
   fds_on_hold = NULL;
   cfree (deleteme);
index 0223af7..589a27a 100644 (file)
@@ -79,6 +79,7 @@ public:
   void stdio_init ();
   void get_debugger_info ();
   void set_file_pointers_for_exec ();
+  bool in_vfork_cleanup () {return fds_on_hold == fds;}
 };
 
 void dtable_init (void);
index 5176180..716846f 100644 (file)
@@ -1130,7 +1130,7 @@ void
 events_init (void)
 {
   char *name;
-  /* title_mutex protects modification of console title. It's neccessary
+  /* title_mutex protects modification of console title. It's necessary
      while finding console window handle */
 
   if (!(title_mutex = CreateMutex (&sec_all_nih, FALSE,
index 9b07410..ee3c725 100644 (file)
@@ -90,7 +90,7 @@ int fhandler_pipe::close ()
     CloseHandle (guard);
   if (writepipe_exists)
     CloseHandle (writepipe_exists);
-  if (read_state)
+  if (read_state && !cygheap->fdtab.in_vfork_cleanup ())
     CloseHandle (read_state);
   return res;
 }