Fix faultd cleanup on exit 10/149110/6
authorKonrad Kuchciak <k.kuchciak@samsung.com>
Mon, 11 Sep 2017 12:08:49 +0000 (14:08 +0200)
committerKonrad Kuchciak <k.kuchciak@samsung.com>
Thu, 14 Sep 2017 12:40:20 +0000 (14:40 +0200)
Cleanup on exit was performed only when SIGINT received, however during
system reboot systemd is sending SIGTERM to all remaining processes and
faultd was not exitting properly.

Change-Id: I9ab9517ef52790e6c75d10bcf21d4f2fcec87beb
Signed-off-by: Konrad Kuchciak <k.kuchciak@samsung.com>
src/faultd.c

index ef60e5a54639febbe0e05835faa0a4719a8fd9e8..ad019b485785e83609dc8db7d362524e4ccb438a 100644 (file)
 static int terminate = 0;
 static struct faultd_config config;
 
-int sigint_handler(sd_event_source *s, const struct signalfd_siginfo *si,
-                                  void *userdata);
-
-int sigint_handler(sd_event_source *s,
+static int signal_handler(sd_event_source *s,
                                   const struct signalfd_siginfo *si,
                                   void *userdata)
 {
@@ -184,8 +181,24 @@ int main(int ac, char *av[])
        /* sd_bus_attach_event(bus, loop, SD_EVENT_PRIORITY_NORMAL); */
        sigemptyset(&ss);
        sigaddset(&ss, SIGINT);
+       sigaddset(&ss, SIGTERM);
        rc = sigprocmask(SIG_BLOCK, &ss, NULL);
-       rc = sd_event_add_signal(loop, NULL, SIGINT, sigint_handler, loop);
+       if (rc < 0) {
+               log_error("Failed to change signal mask %d.", rc);
+               return -1;
+       }
+
+       rc = sd_event_add_signal(loop, NULL, SIGINT, signal_handler, loop);
+       if (rc < 0) {
+               log_error("Failed to register SIGINT handler %d.", rc);
+               return -1;
+       }
+
+       rc = sd_event_add_signal(loop, NULL, SIGTERM, signal_handler, loop);
+       if (rc < 0) {
+               log_error("Failed to register SIGTERM handler %d.", rc);
+               return -1;
+       }
 
        rc = faultd_modules_init(loop, &config);
        if (rc < 0) {