summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonrad Kuchciak <k.kuchciak@samsung.com>2017-09-11 14:08:49 +0200
committerKonrad Kuchciak <k.kuchciak@samsung.com>2017-09-14 14:40:20 +0200
commitc09733ce2a257c889a8814d3f9fddf3cdfe85c69 (patch)
treecba28d71b606cb716359756df66cc640eaf4c0b5
parent9ffa47d0303b40d5213f87da4cfcd2174c54c8bb (diff)
downloadfaultd-c09733ce2a257c889a8814d3f9fddf3cdfe85c69.tar.gz
faultd-c09733ce2a257c889a8814d3f9fddf3cdfe85c69.tar.bz2
faultd-c09733ce2a257c889a8814d3f9fddf3cdfe85c69.zip
Fix faultd cleanup on exit
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>
-rw-r--r--src/faultd.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/faultd.c b/src/faultd.c
index ef60e5a..ad019b4 100644
--- a/src/faultd.c
+++ b/src/faultd.c
@@ -36,10 +36,7 @@
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) {