Replace signal() with sigaction()

The man page for signal(3) reads:

> new applications should use sigaction() rather than signal()
This commit is contained in:
Simon Ser 2025-04-27 18:36:18 +02:00 committed by Kenny Levinsen
parent 0e19d85d37
commit 38a42f97d4
3 changed files with 12 additions and 8 deletions

View file

@ -161,19 +161,21 @@ static void restore_signals(void) {
sigset_t set; sigset_t set;
sigemptyset(&set); sigemptyset(&set);
sigprocmask(SIG_SETMASK, &set, NULL); sigprocmask(SIG_SETMASK, &set, NULL);
signal(SIGCHLD, SIG_DFL);
signal(SIGPIPE, SIG_DFL); struct sigaction sa_dfl = { .sa_handler = SIG_DFL };
sigaction(SIGCHLD, &sa_dfl, NULL);
sigaction(SIGPIPE, &sa_dfl, NULL);
} }
static void init_signals(void) { static void init_signals(void) {
wl_event_loop_add_signal(server.wl_event_loop, SIGTERM, term_signal, NULL); wl_event_loop_add_signal(server.wl_event_loop, SIGTERM, term_signal, NULL);
wl_event_loop_add_signal(server.wl_event_loop, SIGINT, term_signal, NULL); wl_event_loop_add_signal(server.wl_event_loop, SIGINT, term_signal, NULL);
struct sigaction sa_ign = { .sa_handler = SIG_IGN };
// avoid need to reap children // avoid need to reap children
signal(SIGCHLD, SIG_IGN); sigaction(SIGCHLD, &sa_ign, NULL);
// prevent ipc write errors from crashing sway // prevent ipc write errors from crashing sway
signal(SIGPIPE, SIG_IGN); sigaction(SIGPIPE, &sa_ign, NULL);
pthread_atfork(NULL, NULL, restore_signals); pthread_atfork(NULL, NULL, restore_signals);
} }

View file

@ -93,8 +93,9 @@ int main(int argc, char **argv) {
free(socket_path); free(socket_path);
signal(SIGINT, sig_handler); struct sigaction sa = { .sa_handler = sig_handler };
signal(SIGTERM, sig_handler); sigaction(SIGINT, &sa, NULL);
sigaction(SIGTERM, &sa, NULL);
swaybar.running = true; swaybar.running = true;
bar_run(&swaybar); bar_run(&swaybar);

View file

@ -102,7 +102,8 @@ int main(int argc, char **argv) {
sway_log(SWAY_DEBUG, "\t[%s] `%s`", button->text, button->action); sway_log(SWAY_DEBUG, "\t[%s] `%s`", button->text, button->action);
} }
signal(SIGTERM, sig_handler); struct sigaction sa = { .sa_handler = sig_handler };
sigaction(SIGTERM, &sa, NULL);
swaynag_setup(&swaynag); swaynag_setup(&swaynag);
swaynag_run(&swaynag); swaynag_run(&swaynag);