* 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

@@ -235,6 +235,10 @@ public:
void lock () __attribute__ ((regparm (1)));
void unlock () __attribute__ ((regparm (1)));
bool locked () __attribute__ ((regparm (1)));
void create_signal_arrived ()
{
signal_arrived = CreateEvent (&sec_none_nih, false, false, NULL);
}
void set_signal_arrived (bool setit, HANDLE& h)
{
if (!setit)
@@ -242,7 +246,11 @@ public:
else
{
if (!signal_arrived)
signal_arrived = CreateEvent (&sec_none_nih, false, false, NULL);
{
lock ();
create_signal_arrived ();
unlock ();
}
h = signal_arrived;
signal_waiting = true;
}