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