free SIGALRM for boost timers
[src/app-framework-binder.git] / src / sig-monitor.c
index 89fd444..1e51935 100644 (file)
@@ -28,6 +28,8 @@
 #include "sig-monitor.h"
 #include "verbose.h"
 
+#define SIG_FOR_TIMER   (SIGVTALRM+2)
+
 /* local handler */
 static _Thread_local sigjmp_buf *error_handler;
 
@@ -49,7 +51,7 @@ static inline int timeout_create()
                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);
@@ -124,7 +126,7 @@ static void on_signal_error(int signum)
                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);
@@ -146,7 +148,7 @@ static int install(void (*handler)(int), int *signals)
 
 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;
@@ -163,16 +165,6 @@ void sig_monitor_clean_timeouts()
 }
 
 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;
@@ -183,11 +175,11 @@ void sig_monitor3(int timeout, void (*function)(int sig, void*, void*, void*), v
                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)