From f611148366ee3934d16824f8a973177aaece0aa8 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 1 Apr 2001 00:06:17 +0000 Subject: * sigproc.h (class sigframe): Implement 'unregister()' method. (sigframe::~sigframe): Use unregister method. (sigframe::call_signal_handler): Declare new method. * exceptions.cc (sigframe::call_signal_handler): New method. Unregisters current sigframe before calling signal handler. (setup_handler): Clear waiting threads prior to arming signal_arrived. * syscalls.cc (_read): Change goto to loop. Recalculate sigframe inside of loop so that constructor is called when appropriate. * wait.cc (wait4): Ditto. * signal.cc: Change "sig" to "signal" in debugging messages throughout. * sigproc.cc: Ditto. --- winsup/cygwin/sigproc.h | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'winsup/cygwin/sigproc.h') diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h index c67574d5b..1543aa1cf 100644 --- a/winsup/cygwin/sigproc.h +++ b/winsup/cygwin/sigproc.h @@ -49,6 +49,17 @@ class sigframe { private: sigthread *st; + void unregister () + { + if (st) + { + EnterCriticalSection (&st->lock); + st->frame = 0; + st->release_winapi_lock (); + LeaveCriticalSection (&st->lock); + st = NULL; + } + } public: void set (sigthread &t, DWORD ebp) @@ -70,15 +81,10 @@ public: } ~sigframe () { - if (st) - { - EnterCriticalSection (&st->lock); - st->frame = 0; - st->release_winapi_lock (); - LeaveCriticalSection (&st->lock); - st = NULL; - } + unregister (); } + + int call_signal_handler (); }; extern sigthread mainthread; -- cgit v1.2.3