OSDN Git Service

* exceptions.cc (sigpacket::process): Explicitly set thread-specific handler
authorcgf <cgf>
Sat, 19 Sep 2009 15:34:19 +0000 (15:34 +0000)
committercgf <cgf>
Sat, 19 Sep 2009 15:34:19 +0000 (15:34 +0000)
function to zero to avoid transferring to incorrect location.
(_cygtls::call_signal_handler): Don't transfer to handler if there is no
handler to transfer to.

winsup/cygwin/ChangeLog
winsup/cygwin/exceptions.cc

index d44ab54..b3f3892 100644 (file)
@@ -1,3 +1,10 @@
+2009-09-19  Christopher Faylor  <me+cygwin@cgf.cx>
+
+       * exceptions.cc (sigpacket::process): Explicitly set thread-specific
+       handler function to zero to avoid transferring to incorrect location.
+       (_cygtls::call_signal_handler): Don't transfer to handler if there is
+       no handler to transfer to.
+
 2009-09-18  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * exceptions.cc (sigpacket::process): Give sigwait() processing
index a66644c..9d8de75 100644 (file)
@@ -1298,6 +1298,7 @@ done:
 thread_specific:
   use_tls->sig = si.si_signo;
   use_tls->set_siginfo (this);
+  use_tls->func = NULL;
   sigproc_printf ("releasing sigwait for thread");
   SetEvent (use_tls->event);
   goto done;
@@ -1374,7 +1375,7 @@ _cygtls::call_signal_handler ()
 {
   int this_sa_flags = 0;
   /* Call signal handler.  */
-  while (sig)
+  while (sig && func)
     {
       lock ();
       this_sa_flags = sa_flags;