* cygtls.h (_cygtls::create_signal_arrived): New function.

(_cygtls::set_signal_arrived): Lock creation of signal_arrived.
* cygwait.cc (cancelable_wait): Ignore signal_arrived event if _my_tls 'sig'
element does not exist.
* exceptions.cc (_cygtls::interrupt_setup): Create signal_arrived if recipient
thread has not created it.
This commit is contained in:
Christopher Faylor
2012-08-15 18:50:44 +00:00
parent 588b40e260
commit 879f3ad5ee
4 changed files with 36 additions and 7 deletions

View File

@ -796,8 +796,12 @@ _cygtls::interrupt_setup (int sig, void *handler, struct sigaction& siga)
this->sig = sig; // Should always be last thing set to avoid a race
if (incyg && signal_arrived)
SetEvent (signal_arrived);
if (incyg)
{
if (!signal_arrived)
create_signal_arrived ();
SetEvent (signal_arrived);
}
proc_subproc (PROC_CLEARWAIT, 1);
sigproc_printf ("armed signal_arrived %p, signal %d", signal_arrived, sig);