* 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:
@@ -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;
|
||||
|
Reference in New Issue
Block a user