* 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.
This commit is contained in:
Christopher Faylor
2005-09-14 14:00:07 +00:00
parent 67483cb2cd
commit a611ae50d5
8 changed files with 79 additions and 42 deletions

View File

@@ -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