* exceptions.cc (sigpacket::process): Move signal_exit processing into...

(_cygtls::signal_exit): ...here.  Close my_readsig and comment on why.
* pinfo.cc (pinfo::exit): Move sigproc_terminate earlier.  Set exiting flag in
lock_process.
* sigproc.cc (my_readsig): Make global.
* sync.cc (muto::exiting_thread): Delete.
(muto::acquire): Delete #if 0'ed code.
* sync.h (muto::exiting_thread): Delete.
(set_exiting_thread): Ditto.
(lock_process::lock_process): Don't worry about setting the exiting thread
since it had no meaning.
This commit is contained in:
Christopher Faylor
2011-11-26 02:35:49 +00:00
parent 505bce274f
commit 1d04c4c6c3
6 changed files with 32 additions and 25 deletions

View File

@ -1307,17 +1307,6 @@ thread_specific:
goto done;
exit_sig:
if (si.si_signo == SIGQUIT || si.si_signo == SIGABRT)
{
CONTEXT c;
c.ContextFlags = CONTEXT_FULL;
GetThreadContext (hMainThread, &c);
use_tls->copy_context (&c);
if (cygheap->rlim_core > 0UL)
si.si_signo |= 0x80;
}
SetEvent (signal_arrived); // To avoid a potential deadlock with proc_lock
sigproc_printf ("signal %d, about to call do_exit", si.si_signo);
use_tls->signal_exit (si.si_signo); /* never returns */
}
@ -1327,6 +1316,20 @@ exit_sig:
void
_cygtls::signal_exit (int rc)
{
extern HANDLE my_readsig;
ForceCloseHandle (my_readsig); /* Disallow further signal sends */
SetEvent (signal_arrived); /* Avoid potential deadlock with proc_lock */
if (rc == SIGQUIT || rc == SIGABRT)
{
CONTEXT c;
c.ContextFlags = CONTEXT_FULL;
GetThreadContext (hMainThread, &c);
copy_context (&c);
if (cygheap->rlim_core > 0UL)
rc |= 0x80;
}
if (have_execed)
{
sigproc_printf ("terminating captive process");