mask handled signals when running signal handler

This commit is contained in:
Kovid Goyal 2022-07-10 12:48:42 +05:30
parent 7b70ed96b6
commit f96a13e9e4
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -272,7 +272,14 @@ setup_signal_handler(void) {
if (pipe(fds) != 0) return false;
signal_read_fd = fds[0]; signal_write_fd = fds[1];
set_blocking(signal_write_fd, false);
struct sigaction act = {.sa_sigaction=handle_signal, .sa_flags=SA_SIGINFO | SA_RESTART};
sigset_t masked_signals;
sigemptyset(&masked_signals);
sigaddset(&masked_signals, SIGWINCH);
sigaddset(&masked_signals, SIGINT);
sigaddset(&masked_signals, SIGTERM);
sigaddset(&masked_signals, SIGQUIT);
sigaddset(&masked_signals, SIGHUP);
struct sigaction act = {.sa_sigaction=handle_signal, .sa_flags=SA_SIGINFO | SA_RESTART, .sa_mask = masked_signals};
#define a(which) if (sigaction(which, &act, NULL) != 0) return false;
a(SIGWINCH); a(SIGINT); a(SIGTERM); a(SIGQUIT); a(SIGHUP);
#undef a