diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2019-01-12 21:19:52 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-01-12 21:26:07 +0100 |
commit | 9e295a8d193e138808931816f5858761ff08f402 (patch) | |
tree | 62d319602869f3a2ee4991a4234b1eafc8ffe28c /winsup/cygwin/exceptions.cc | |
parent | 961be8d726a81918d8d34c9dae603e7820a2416f (diff) | |
download | newlib-9e295a8d193e138808931816f5858761ff08f402.zip newlib-9e295a8d193e138808931816f5858761ff08f402.tar.gz newlib-9e295a8d193e138808931816f5858761ff08f402.tar.bz2 |
Cygwin: posix timers: implement timer_getoverrun
- set DELAYTIMER_MAX to INT_MAX
- make sure to set siginfo_t::si_overrun, as on Linux
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/exceptions.cc')
-rw-r--r-- | winsup/cygwin/exceptions.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 419b097..8c1b3b4 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -27,6 +27,7 @@ details. */ #include "child_info.h" #include "ntdll.h" #include "exception.h" +#include "timer.h" /* Definitions for code simplification */ #ifdef __x86_64__ @@ -1473,6 +1474,8 @@ sigpacket::process () if (handler == SIG_IGN) { + if (si.si_code == SI_TIMER) + ((timer_tracker *) si.si_tid)->disarm_event (); sigproc_printf ("signal %d ignored", si.si_signo); goto done; } @@ -1496,6 +1499,8 @@ sigpacket::process () || si.si_signo == SIGCONT || si.si_signo == SIGWINCH || si.si_signo == SIGURG) { + if (si.si_code == SI_TIMER) + ((timer_tracker *) si.si_tid)->disarm_event (); sigproc_printf ("signal %d default is currently ignore", si.si_signo); goto done; } @@ -1620,6 +1625,13 @@ _cygtls::call_signal_handler () sigset_t this_oldmask = set_process_mask_delta (); + if (infodata.si_code == SI_TIMER) + { + timer_tracker *tt = (timer_tracker *) + infodata.si_tid; + infodata.si_overrun = tt->disarm_event (); + } + /* Save information locally on stack to pass to handler. */ int thissig = sig; siginfo_t thissi = infodata; |