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