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