* 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:
parent
0ef785e4ee
commit
1ba3935dfb
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ())
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue