diff options
author | Konrad Kuchciak <k.kuchciak@samsung.com> | 2017-09-11 14:08:49 +0200 |
---|---|---|
committer | Konrad Kuchciak <k.kuchciak@samsung.com> | 2017-09-14 14:40:20 +0200 |
commit | c09733ce2a257c889a8814d3f9fddf3cdfe85c69 (patch) | |
tree | cba28d71b606cb716359756df66cc640eaf4c0b5 | |
parent | 9ffa47d0303b40d5213f87da4cfcd2174c54c8bb (diff) | |
download | faultd-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.c | 23 |
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) { |