* 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> Sun Apr 1 00:38:06 2001 Christopher Faylor <cgf@cygnus.com>
* exceptions.cc (sigframe::call_signal_handler): Move outside of "C" * exceptions.cc (sigframe::call_signal_handler): Move outside of "C"

View File

@ -1119,14 +1119,22 @@ events_terminate (void)
} }
extern "C" { 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 int
sigframe::call_signal_handler () sigframe::call_signal_handler ()
{ {
unregister (); unregister ();
call_signal_handler_now (); return call_signal_handler_now ();
} }
#define pid_offset (unsigned)(((_pinfo *)NULL)->pid) #define pid_offset (unsigned)(((_pinfo *)NULL)->pid)
@ -1138,16 +1146,6 @@ reset_signal_arrived ()
sigproc_printf ("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 () void unused_sig_wrapper ()
{ {
/* Signal cleanup stuff. Cleans up stack (too bad that we didn't /* Signal cleanup stuff. Cleans up stack (too bad that we didn't

View File

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

View File

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