diff options
Diffstat (limited to 'src/util/timeout.c')
| -rw-r--r-- | src/util/timeout.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/util/timeout.c b/src/util/timeout.c index 51138fd..c9e20e0 100644 --- a/src/util/timeout.c +++ b/src/util/timeout.c @@ -3,18 +3,26 @@ * Copyright (C) 2017 J08nY */ #include "timeout.h" -#include <signal.h> -__thread jmp_buf exception; +__thread jmp_buf timeout_ptr; +__thread bool timeout_in; +__thread timer_t timeout_timer; -void timeout_handle(int signum) { longjmp(exception, 1); } +void timeout_handle(int signum, siginfo_t *siginfo, void *other) { + sigset_t mask; + sigemptyset(&mask); + sigaddset(&mask, SIGALRM); + sigprocmask(SIG_UNBLOCK, &mask, NULL); + + if (timeout_in) siglongjmp(timeout_ptr, 1); +} bool timeout_init(const config_t *cfg) { struct sigaction new_action; - new_action.sa_handler = timeout_handle; + new_action.sa_sigaction = timeout_handle; sigemptyset(&new_action.sa_mask); - new_action.sa_flags = 0; + new_action.sa_flags = SA_SIGINFO; sigaction(SIGALRM, &new_action, NULL); return true; |
