From 1d04c4c6c36f307f79a5617bc62e1a766ce01355 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 26 Nov 2011 02:35:49 +0000 Subject: * 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. --- winsup/cygwin/exceptions.cc | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'winsup/cygwin/exceptions.cc') diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 98707e22a..b84a9fb35 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -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"); -- cgit v1.2.3