X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fsig-monitor.c;h=ce0a4cd028256ec87cd3ab6aa4e02c8ca1ba8d6e;hb=090379fdaf6ed1860dcff21424135ad71ead0cd2;hp=d00f0f974b9e46af24d91abc35e5a38ad20b9b8a;hpb=feccdb76f572a5fad947475c21b5b9aff696b04b;p=src%2Fapp-framework-binder.git diff --git a/src/sig-monitor.c b/src/sig-monitor.c index d00f0f97..ce0a4cd0 100644 --- a/src/sig-monitor.c +++ b/src/sig-monitor.c @@ -28,6 +28,8 @@ #include "sig-monitor.h" #include "verbose.h" +#define SIG_FOR_TIMER SIGVTALRM + /* 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); @@ -115,6 +117,8 @@ static void on_signal_error(int signum) { 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); @@ -122,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); @@ -144,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; @@ -161,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; @@ -181,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)