#include "sig-monitor.h"
#include "verbose.h"
+#define SIG_FOR_TIMER SIGVTALRM
+
/* local handler */
static _Thread_local sigjmp_buf *error_handler;
rc = 0;
else {
sevp.sigev_notify = SIGEV_THREAD_ID;
- sevp.sigev_signo = SIGALRM;
+ sevp.sigev_signo = SIG_FOR_TIMER;
sevp.sigev_value.sival_ptr = NULL;
#if defined(sigev_notify_thread_id)
sevp.sigev_notify_thread_id = (pid_t)syscall(SYS_gettid);
{
sigset_t sigset;
+ ERROR("ALERT! signal %d received: %s", signum, strsignal(signum));
+
// unlock signal to allow a new signal to come
if (error_handler != NULL) {
sigemptyset(&sigset);
sigprocmask(SIG_UNBLOCK, &sigset, 0);
longjmp(*error_handler, signum);
}
- if (signum == SIGALRM)
+ if (signum == SIG_FOR_TIMER)
return;
ERROR("Unmonitored signal %d received: %s", signum, strsignal(signum));
exit(2);
int sig_monitor_init()
{
- static int sigerr[] = { SIGALRM, SIGSEGV, SIGFPE, 0 };
+ static int sigerr[] = { SIG_FOR_TIMER, SIGSEGV, SIGFPE, 0 };
static int sigterm[] = { SIGINT, SIGABRT, 0 };
return (install(on_signal_error, sigerr) & install(on_signal_terminate, sigterm)) - 1;
}
void sig_monitor(int timeout, void (*function)(int sig, void*), void *arg)
-{
- sig_monitor3(timeout, (void (*)(int,void*,void*,void*))function, arg, NULL, NULL);
-}
-
-void sig_monitor2(int timeout, void (*function)(int sig, void*, void*), void *arg1, void *arg2)
-{
- sig_monitor3(timeout, (void (*)(int,void*,void*,void*))function, arg1, arg2, NULL);
-}
-
-void sig_monitor3(int timeout, void (*function)(int sig, void*, void*, void*), void *arg1, void *arg2, void *arg3)
{
volatile int signum, signum2;
sigjmp_buf jmpbuf, *older;
error_handler = &jmpbuf;
if (timeout)
timeout_arm(timeout);
- function(0, arg1, arg2, arg3);
+ function(0, arg);
} else {
signum2 = setjmp(jmpbuf);
if (signum2 == 0)
- function(signum, arg1, arg2, arg3);
+ function(signum, arg);
}
error_handler = older;
if (timeout)