* exceptions.cc (sigframe::call_signal_handler): Return value of

call_signal_handler_now.
* sigproc.h (sigframe): Use constructor.
* syscalls.cc (_read): Correct errno test prior to calling signal handler.
This commit is contained in:
Christopher Faylor 2001-04-02 00:18:29 +00:00
parent 0ef785e4ee
commit 1ba3935dfb
4 changed files with 20 additions and 14 deletions

View File

@ -1,3 +1,11 @@
Sun Apr 1 20:10:34 2001 Christopher Faylor <cgf@cygnus.com>
* exceptions.cc (sigframe::call_signal_handler): Return value of
call_signal_handler_now.
* sigproc.h (sigframe): Use constructor.
* syscalls.cc (_read): Correct errno test prior to calling signal
handler.
Sun Apr 1 00:38:06 2001 Christopher Faylor <cgf@cygnus.com>
* exceptions.cc (sigframe::call_signal_handler): Move outside of "C"

View File

@ -1119,14 +1119,22 @@ events_terminate (void)
}
extern "C" {
static int __stdcall call_signal_handler_now ();
static int __stdcall
call_signal_handler_now ()
{
int sa_flags = sigsave.sa_flags;
sigproc_printf ("sa_flags %p", sa_flags);
*sigsave.retaddr_on_stack = sigsave.retaddr;
sigdelayed0 ();
return sa_flags & SA_RESTART;
}
};
int
sigframe::call_signal_handler ()
{
unregister ();
call_signal_handler_now ();
return call_signal_handler_now ();
}
#define pid_offset (unsigned)(((_pinfo *)NULL)->pid)
@ -1138,16 +1146,6 @@ reset_signal_arrived ()
sigproc_printf ("reset signal_arrived");
}
static int __stdcall
call_signal_handler_now ()
{
int sa_flags = sigsave.sa_flags;
sigproc_printf ("sa_flags %p", sa_flags);
*sigsave.retaddr_on_stack = sigsave.retaddr;
sigdelayed0 ();
return sa_flags & SA_RESTART;
}
void unused_sig_wrapper ()
{
/* Signal cleanup stuff. Cleans up stack (too bad that we didn't

View File

@ -71,7 +71,7 @@ public:
t.get_winapi_lock ();
}
sigframe () {st = NULL;}
sigframe (): st (NULL) {}
sigframe (sigthread &t, DWORD ebp = (DWORD) __builtin_frame_address (0))
{
if (!t.frame && t.id == GetCurrentThreadId ())

View File

@ -273,7 +273,7 @@ _read (int fd, void *ptr, size_t len)
}
out:
if (res >= 0 || get_errno () == EINTR || !thisframe.call_signal_handler ())
if (res >= 0 || get_errno () != EINTR || !thisframe.call_signal_handler ())
break;
}