From 89f49b5bc78b7f7e77435d8e9b6b2e48751b7c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 10 Feb 2021 16:21:56 +0100 Subject: [PATCH] main: monitor SIGINT+SIGTERM using the FDM --- main.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/main.c b/main.c index f8da2fb3..46d26b81 100644 --- a/main.c +++ b/main.c @@ -33,12 +33,11 @@ #include "xmalloc.h" #include "xsnprintf.h" -static volatile sig_atomic_t aborted = 0; - -static void -sig_handler(int signo) +static bool +fdm_sigint(struct fdm *fdm, int signo, void *data) { - aborted = 1; + *(volatile sig_atomic_t *)data = true; + return true; } static const char * @@ -476,10 +475,10 @@ main(int argc, char *const *argv) if (as_server && (server = server_init(&conf, fdm, reaper, wayl)) == NULL) goto out; - /* Remember to restore signals in slave */ - const struct sigaction sa = {.sa_handler = &sig_handler}; - if (sigaction(SIGINT, &sa, NULL) < 0 || sigaction(SIGTERM, &sa, NULL) < 0) { - LOG_ERRNO("failed to register signal handlers"); + volatile sig_atomic_t aborted = false; + if (!fdm_signal_add(fdm, SIGINT, &fdm_sigint, (void *)&aborted) || + !fdm_signal_add(fdm, SIGTERM, &fdm_sigint, (void *)&aborted)) + { goto out; } @@ -512,6 +511,8 @@ out: render_destroy(renderer); wayl_destroy(wayl); reaper_destroy(reaper); + fdm_signal_del(fdm, SIGTERM); + fdm_signal_del(fdm, SIGINT); fdm_destroy(fdm); config_free(conf);