diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 247b80e46..80f4599b6 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +2012-12-04 Christopher Faylor + + * cygtls.h (_cygtls::will_wait_for_signal): Rename from + 'signal_waiting' to something more expressive. Reflect rename + throughout. + (_cygtls::get_signal_arrived): Rename from create_signal_arrived. Move + lock here. + (_cygtls::set_signal_arrived): Use get_signal_arrived. + * exceptions.cc (_cygtls::interrupt_setup): Use get_signal_arrived. + * tlsoffsets.h: Regenerate. + 2012-11-30 Christopher Faylor * spawn.cc (child_info_spawn::worker): Make detection of '/c' case diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h index 4f4f17c6b..4946e59c9 100644 --- a/winsup/cygwin/cygtls.h +++ b/winsup/cygwin/cygtls.h @@ -187,7 +187,7 @@ public: sigset_t sigwait_mask; siginfo_t *sigwait_info; HANDLE signal_arrived; - bool signal_waiting; + bool will_wait_for_signal; struct ucontext thread_context; DWORD thread_id; siginfo_t infodata; @@ -233,27 +233,28 @@ public: void lock () __attribute__ ((regparm (1))); void unlock () __attribute__ ((regparm (1))); bool locked () __attribute__ ((regparm (1))); - void create_signal_arrived () + HANDLE get_signal_arrived () { - signal_arrived = CreateEvent (&sec_none_nih, false, false, NULL); + if (!signal_arrived) + { + lock (); + if (!signal_arrived) + signal_arrived = CreateEvent (&sec_none_nih, false, false, NULL); + unlock (); + } + return signal_arrived; } void set_signal_arrived (bool setit, HANDLE& h) { if (!setit) - signal_waiting = false; + will_wait_for_signal = false; else { - if (!signal_arrived) - { - lock (); - create_signal_arrived (); - unlock (); - } - h = signal_arrived; - signal_waiting = true; + h = get_signal_arrived (); + will_wait_for_signal = true; } } - void reset_signal_arrived () { signal_waiting = false; } + void reset_signal_arrived () { will_wait_for_signal = false; } private: void call2 (DWORD (*) (void *, void *), void *, void *) __attribute__ ((regparm (3))); /*gentls_offsets*/ @@ -327,7 +328,7 @@ public: set_signal_arrived (bool setit, HANDLE& h) { _my_tls.set_signal_arrived (setit, h); } set_signal_arrived (HANDLE& h) { _my_tls.set_signal_arrived (true, h); } - operator int () const {return _my_tls.signal_waiting;} + operator int () const {return _my_tls.will_wait_for_signal;} ~set_signal_arrived () { _my_tls.reset_signal_arrived (); } }; diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index aa3032816..5ec0f2c71 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -799,11 +799,7 @@ _cygtls::interrupt_setup (siginfo_t& si, void *handler, struct sigaction& siga) this->sig = si.si_signo; // Should always be last thing set to avoid a race if (incyg) - { - if (!signal_arrived) - create_signal_arrived (); - SetEvent (signal_arrived); - } + SetEvent (get_signal_arrived ()); proc_subproc (PROC_CLEARWAIT, 1); sigproc_printf ("armed signal_arrived %p, signal %d", signal_arrived, si.si_signo); diff --git a/winsup/cygwin/tlsoffsets.h b/winsup/cygwin/tlsoffsets.h index 1ab4559b9..2347e9291 100644 --- a/winsup/cygwin/tlsoffsets.h +++ b/winsup/cygwin/tlsoffsets.h @@ -27,8 +27,8 @@ //; $tls::psigwait_info = 2584; //; $tls::signal_arrived = -10112; //; $tls::psignal_arrived = 2588; -//; $tls::signal_waiting = -10108; -//; $tls::psignal_waiting = 2592; +//; $tls::will_wait_for_signal = -10108; +//; $tls::pwill_wait_for_signal = 2592; //; $tls::thread_context = -10104; //; $tls::pthread_context = 2596; //; $tls::thread_id = -9892; @@ -85,8 +85,8 @@ #define tls_psigwait_info (2584) #define tls_signal_arrived (-10112) #define tls_psignal_arrived (2588) -#define tls_signal_waiting (-10108) -#define tls_psignal_waiting (2592) +#define tls_will_wait_for_signal (-10108) +#define tls_pwill_wait_for_signal (2592) #define tls_thread_context (-10104) #define tls_pthread_context (2596) #define tls_thread_id (-9892)