Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2012-08-15 22:50:44 +0400
committerChristopher Faylor <me@cgf.cx>2012-08-15 22:50:44 +0400
commit879f3ad5eefc0cb914e7fed1a219ebb11c995a99 (patch)
tree3070364adc2f282714d85761bb6c975bd516ffbc /winsup/cygwin/cygtls.h
parent588b40e260f180d02c91132821856c12c83fddc2 (diff)
* 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.
Diffstat (limited to 'winsup/cygwin/cygtls.h')
-rw-r--r--winsup/cygwin/cygtls.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h
index d683cf837..134fde290 100644
--- a/winsup/cygwin/cygtls.h
+++ b/winsup/cygwin/cygtls.h
@@ -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;
}