diff --git a/kitty/loop-utils.c b/kitty/loop-utils.c index 78bddbaa1..79527934d 100644 --- a/kitty/loop-utils.c +++ b/kitty/loop-utils.c @@ -34,10 +34,10 @@ handle_signal(int sig_num UNUSED, siginfo_t *si, void *ucontext UNUSED) { static bool init_signal_handlers(LoopData *ld) { ld->signal_read_fd = -1; -#ifdef HAS_SIGNAL_FD sigemptyset(&ld->signals); + for (size_t i = 0; i < ld->num_handled_signals; i++) sigaddset(&ld->signals, ld->handled_signals[i]); +#ifdef HAS_SIGNAL_FD if (ld->num_handled_signals) { - for (size_t i = 0; i < ld->num_handled_signals; i++) sigaddset(&ld->signals, ld->handled_signals[i]); if (sigprocmask(SIG_BLOCK, &ld->signals, NULL) == -1) return false; ld->signal_read_fd = signalfd(-1, &ld->signals, SFD_NONBLOCK | SFD_CLOEXEC); if (ld->signal_read_fd == -1) return false; @@ -48,7 +48,7 @@ init_signal_handlers(LoopData *ld) { if (!self_pipe(ld->signal_fds, true)) return false; signal_write_fd = ld->signal_fds[1]; ld->signal_read_fd = ld->signal_fds[0]; - struct sigaction act = {.sa_sigaction=handle_signal, .sa_flags=SA_SIGINFO | SA_RESTART}; + struct sigaction act = {.sa_sigaction=handle_signal, .sa_flags=SA_SIGINFO | SA_RESTART, .sa_mask = ld->signals}; for (size_t i = 0; i < ld->num_handled_signals; i++) { if (sigaction(ld->handled_signals[i], &act, NULL) != 0) return false; } } #endif diff --git a/kitty/loop-utils.h b/kitty/loop-utils.h index 1116bed1e..c07547fc9 100644 --- a/kitty/loop-utils.h +++ b/kitty/loop-utils.h @@ -34,9 +34,8 @@ typedef struct { #endif #ifndef HAS_SIGNAL_FD int signal_fds[2]; -#else - sigset_t signals; #endif + sigset_t signals; int wakeup_read_fd; int signal_read_fd; int handled_signals[16];