diff options
author | Christopher Faylor <me@cgf.cx> | 2001-04-02 00:18:29 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2001-04-02 00:18:29 +0000 |
commit | 1ba3935dfb61f418d81305d677475dbadfbdde3f (patch) | |
tree | 0a005fb41ff2dc7182fb8ee635b06adf83d991eb | |
parent | 0ef785e4eef1757b27f34192331031fa68021f90 (diff) | |
download | newlib-1ba3935dfb61f418d81305d677475dbadfbdde3f.zip newlib-1ba3935dfb61f418d81305d677475dbadfbdde3f.tar.gz newlib-1ba3935dfb61f418d81305d677475dbadfbdde3f.tar.bz2 |
* 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.
-rw-r--r-- | winsup/cygwin/ChangeLog | 8 | ||||
-rw-r--r-- | winsup/cygwin/exceptions.cc | 22 | ||||
-rw-r--r-- | winsup/cygwin/sigproc.h | 2 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 2 |
4 files changed, 20 insertions, 14 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 6cbbe5d..6b6cd1d 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -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" diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index a56b35e..3a3bdb9 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -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 diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h index 1543aa1..2951703 100644 --- a/winsup/cygwin/sigproc.h +++ b/winsup/cygwin/sigproc.h @@ -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 ()) diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 255fef1..6ec1e05 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -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; } |