diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 513dd826a..2c2e9eb5b 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +2003-01-03 Christopher Faylor + + * 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 * passwd.cc (getpwuid_r32): Revert previous change. diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index be3e0da97..7b8e8272d 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -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); diff --git a/winsup/cygwin/dtable.h b/winsup/cygwin/dtable.h index 0223af71f..589a27a0d 100644 --- a/winsup/cygwin/dtable.h +++ b/winsup/cygwin/dtable.h @@ -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); diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 5176180b3..716846f89 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -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, diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc index 9b0741001..ee3c72575 100644 --- a/winsup/cygwin/pipe.cc +++ b/winsup/cygwin/pipe.cc @@ -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; }