* fhandler_tty.cc (fhandler_tty_common::dup): Just copy cygheap->ctty to child

if duping the current ctty.
(fhandler_tty_common::close): Move debugging statement earlier in function.
(fhandler_tty_slave::close): Return success when closing ctty.
* syscalls.cc (close_all_files): Avoid calling fhandler_tty_slave close method
so that open_fhs will not be decremented when closing cygheap ctty.
(setsid): Ditto.
* dcrt0.cc (do_exit): Reorganize to avoid leaving a critical section active
after vfork.
* fhandler.h (fhandler_tty_slave::get_unit): Remove regparm parameter since it
can't work in a virtualized function.
This commit is contained in:
Christopher Faylor
2003-12-10 03:19:19 +00:00
parent 7176387b4f
commit ce40c6baf7
5 changed files with 40 additions and 22 deletions

View File

@@ -952,21 +952,23 @@ extern CRITICAL_SECTION exit_lock;
void __stdcall
do_exit (int status)
{
syscall_printf ("do_exit (%d), exit_state %d", status, exit_state);
vfork_save *vf = vfork_storage.val ();
if (vf != NULL && vf->pid < 0)
{
exit_state = ES_NOT_EXITING;
vf->restore_exit (status);
}
EnterCriticalSection (&exit_lock);
if (exit_state < ES_EVENTS_TERMINATE)
{
exit_state = ES_EVENTS_TERMINATE;
events_terminate ();
}
EnterCriticalSection (&exit_lock);
UINT n = (UINT) status;
syscall_printf ("do_exit (%d)", n);
vfork_save *vf = vfork_storage.val ();
if (vf != NULL && vf->pid < 0)
vf->restore_exit (status);
if (exit_state < ES_THREADTERM)
{
exit_state = ES_THREADTERM;