diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 9db5e8c86..d5868b359 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +Tue Sep 11 21:55:37 2001 Christopher Faylor + + * sigproc.h (sigframe::unregister): Return true/false whether this + frame is capable of responding to signals. + * exceptions.cc (sigframe::call_signal_handler): Don't call signal + handler if it is not armed for this thread. + Tue Sep 11 11:23:10 2001 Christopher Faylor * cygwin.din: Remove cygwin_getshared. diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index a06774d09..bf4a4446e 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -1142,8 +1142,8 @@ static int __stdcall call_signal_handler_now_dummy () int sigframe::call_signal_handler () { - unregister (); - return call_signal_handler_now (); + return unregister () ? call_signal_handler_now () : 0; + } #define pid_offset (unsigned)(((_pinfo *)NULL)->pid) diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h index 5726a4519..38e65faaa 100644 --- a/winsup/cygwin/sigproc.h +++ b/winsup/cygwin/sigproc.h @@ -50,17 +50,17 @@ class sigframe { private: sigthread *st; - void unregister () + bool unregister () { - if (st) - { - EnterCriticalSection (&st->lock); - st->frame = 0; - st->exception = 0; - st->release_winapi_lock (); - LeaveCriticalSection (&st->lock); - st = NULL; - } + if (!st) + return 0; + EnterCriticalSection (&st->lock); + st->frame = 0; + st->exception = 0; + st->release_winapi_lock (); + LeaveCriticalSection (&st->lock); + st = NULL; + return 1; } public: