From a611ae50d5c1106988df7ec8b053efc332e35ae3 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 14 Sep 2005 14:00:07 +0000 Subject: * exceptions.cc (sigtid): Remove declaration. (handle_exceptions): Use _sig_tls rather than sigtid to determine if this is the signal thread. (set_signal_mask): Ditto for conditionalized CGF code. * pinfo.cc (pinfo::exit): Exit the thread if we forcefully terminated the main thread * sigproc.cc (sigtid): Delete. (_sig_tls): Define. (sig_clear): Use _sig_tls rather than sigtid to determine if this is the signal thread. (sig_dispatch_pending): Ditto. (wait_sig): Set _sig_tls here. * dcrt0.cc (do_exit): Move sigproc_terminate call later since signal handling was still needed for subsequent stuff. Call sigproc_terminate with new exit_state value. * pinfo.cc (pinfo::exit): Call sigproc_terminate with new exit_state value. * sigproc.cc (proc_terminate): Remove unnecessary (void) parameter. (sigproc_terminate): Ditto. Add new argument to accept exit state to be set. (wait_sig): Reorganize __SIGEXIT handling. Add more debugging output. * winsup.h (sigproc_terminate): Declare with new exit_state argument. (exit_states): Reorganize to reflect new exit ordering of sigproc_terminate. --- winsup/cygwin/dcrt0.cc | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'winsup/cygwin/dcrt0.cc') diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index b7207667f..f293901b8 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -1056,17 +1056,7 @@ do_exit (int status) close_all_files (); } - if (exit_state < ES_SIGPROCTERMINATE) - sigproc_terminate (); // sets exit_state directly - myself->stopsig = 0; - if (exit_state < ES_TITLE) - { - exit_state = ES_TITLE; - /* restore console title */ - if (old_title && display_title) - set_console_title (old_title); - } if (exit_state < ES_HUP_PGRP) { @@ -1101,6 +1091,17 @@ do_exit (int status) } + if (exit_state < ES_SIGPROCTERMINATE) + sigproc_terminate (ES_SIGPROCTERMINATE); // sets exit_state directly + + if (exit_state < ES_TITLE) + { + exit_state = ES_TITLE; + /* restore console title */ + if (old_title && display_title) + set_console_title (old_title); + } + if (exit_state < ES_TTY_TERMINATE) { exit_state = ES_TTY_TERMINATE; @@ -1165,9 +1166,6 @@ __api_fatal (const char *fmt, ...) WriteFile (h, buf, len, &done, 0); } - /* We are going down without mercy. Make sure we reset - our process_state. */ - sigproc_terminate (); #ifdef DEBUGGING try_to_debug (); #endif -- cgit v1.2.3