From a3601e4de99251c1e73aa2a231b55dd0280240d9 Mon Sep 17 00:00:00 2001 From: cgf Date: Wed, 12 Sep 2001 01:56:32 +0000 Subject: [PATCH] * 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. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/exceptions.cc | 4 ++-- winsup/cygwin/sigproc.h | 20 ++++++++++---------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 9db5e8c860..d5868b359a 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 a06774d09a..bf4a4446e2 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 5726a45197..38e65faaae 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: -- 2.11.0