* 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.
This commit is contained in:
Christopher Faylor
2001-04-01 00:06:17 +00:00
parent ab57d14639
commit f611148366
7 changed files with 156 additions and 122 deletions

View File

@ -864,10 +864,10 @@ setup_handler (int sig, void *handler, struct sigaction& siga)
}
else
{
res = SetEvent (signal_arrived); // For an EINTR case
sigproc_printf ("armed signal_arrived %p, res %d", signal_arrived, res);
/* Clear any waiting threads prior to dispatching to handler function */
proc_subproc (PROC_CLEARWAIT, 1);
res = SetEvent (signal_arrived); // For an EINTR case
sigproc_printf ("armed signal_arrived %p, res %d", signal_arrived, res);
}
if (th)
@ -1127,6 +1127,13 @@ reset_signal_arrived ()
sigproc_printf ("reset signal_arrived");
}
int
sigframe::call_signal_handler ()
{
unregister ();
::call_signal_handler ();
}
int __stdcall
call_signal_handler ()
{