sig-monitor: Make signal list global
authorJosé Bollo <jose.bollo@iot.bzh>
Thu, 21 Dec 2017 11:33:32 +0000 (12:33 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Wed, 3 Jan 2018 08:41:41 +0000 (09:41 +0100)
Change-Id: I456a08dccf65d1a188e7bb7e0a6ab905ae823a25
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/sig-monitor.c

index db83343..f5762bc 100644 (file)
@@ -40,6 +40,9 @@ static _Thread_local int in_safe_dumpstack;
 static _Thread_local int thread_timer_set;
 static _Thread_local timer_t thread_timerid;
 
+/* internal signal lists */
+static int sigerr[] = { SIG_FOR_TIMER, SIGSEGV, SIGFPE, SIGILL, SIGBUS, 0 };
+static int sigterm[] = { SIGINT, SIGABRT, SIGTERM, 0 };
 /*
  * Dumps the current stack
  */
@@ -161,6 +164,25 @@ static inline void timeout_delete()
        }
 }
 
+/* install the handlers */
+static int install(void (*handler)(int), int *signals)
+{
+       int result = 1;
+       struct sigaction sa;
+
+       sa.sa_handler = handler;
+       sigemptyset(&sa.sa_mask);
+       sa.sa_flags = SA_NODEFER;
+       while(*signals > 0) {
+               if (sigaction(*signals, &sa, NULL) < 0) {
+                       ERROR("failed to install signal handler for signal %s: %m", strsignal(*signals));
+                       result = 0;
+               }
+               signals++;
+       }
+       return result;
+}
+
 
 /* Handles signals that terminate the process */
 static void on_signal_terminate (int signum)
@@ -193,30 +215,8 @@ static void on_signal_error(int signum)
        exit(2);
 }
 
-/* install the handlers */
-static int install(void (*handler)(int), int *signals)
-{
-       int result = 1;
-       struct sigaction sa;
-
-       sa.sa_handler = handler;
-       sigemptyset(&sa.sa_mask);
-       sa.sa_flags = SA_NODEFER;
-       while(*signals > 0) {
-               if (sigaction(*signals, &sa, NULL) < 0) {
-                       ERROR("failed to install signal handler for signal %s: %m", strsignal(*signals));
-                       result = 0;
-               }
-               signals++;
-       }
-       return result;
-}
-
 int sig_monitor_init()
 {
-       static int sigerr[] = { SIG_FOR_TIMER, SIGSEGV, SIGFPE, SIGILL, SIGBUS, 0 };
-       static int sigterm[] = { SIGINT, SIGABRT, SIGTERM, 0 };
-
        return (install(on_signal_error, sigerr) & install(on_signal_terminate, sigterm)) - 1;
 }