sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit 38a42f97d46931e97693610c999ea51834b71352
parent 0e19d85d37e556721f982c3f63d4e2927f306b18
Author: Simon Ser <contact@emersion.fr>
Date:   Sun, 27 Apr 2025 18:36:18 +0200

Replace signal() with sigaction()

The man page for signal(3) reads:

> new applications should use sigaction() rather than signal()

Diffstat:
Msway/main.c | 12+++++++-----
Mswaybar/main.c | 5+++--
Mswaynag/main.c | 3++-
3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/sway/main.c b/sway/main.c @@ -161,19 +161,21 @@ static void restore_signals(void) { sigset_t set; sigemptyset(&set); 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) { 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); + struct sigaction sa_ign = { .sa_handler = SIG_IGN }; // avoid need to reap children - signal(SIGCHLD, SIG_IGN); - + sigaction(SIGCHLD, &sa_ign, NULL); // prevent ipc write errors from crashing sway - signal(SIGPIPE, SIG_IGN); + sigaction(SIGPIPE, &sa_ign, NULL); pthread_atfork(NULL, NULL, restore_signals); } diff --git a/swaybar/main.c b/swaybar/main.c @@ -93,8 +93,9 @@ int main(int argc, char **argv) { free(socket_path); - signal(SIGINT, sig_handler); - signal(SIGTERM, sig_handler); + struct sigaction sa = { .sa_handler = sig_handler }; + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); swaybar.running = true; bar_run(&swaybar); diff --git a/swaynag/main.c b/swaynag/main.c @@ -102,7 +102,8 @@ int main(int argc, char **argv) { 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_run(&swaynag);