mask handled signals when running the signal handler
This commit is contained in:
parent
8358377ec3
commit
4c2800b294
@ -34,10 +34,10 @@ handle_signal(int sig_num UNUSED, siginfo_t *si, void *ucontext UNUSED) {
|
|||||||
static bool
|
static bool
|
||||||
init_signal_handlers(LoopData *ld) {
|
init_signal_handlers(LoopData *ld) {
|
||||||
ld->signal_read_fd = -1;
|
ld->signal_read_fd = -1;
|
||||||
#ifdef HAS_SIGNAL_FD
|
|
||||||
sigemptyset(&ld->signals);
|
sigemptyset(&ld->signals);
|
||||||
if (ld->num_handled_signals) {
|
|
||||||
for (size_t i = 0; i < ld->num_handled_signals; i++) sigaddset(&ld->signals, ld->handled_signals[i]);
|
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) {
|
||||||
if (sigprocmask(SIG_BLOCK, &ld->signals, NULL) == -1) return false;
|
if (sigprocmask(SIG_BLOCK, &ld->signals, NULL) == -1) return false;
|
||||||
ld->signal_read_fd = signalfd(-1, &ld->signals, SFD_NONBLOCK | SFD_CLOEXEC);
|
ld->signal_read_fd = signalfd(-1, &ld->signals, SFD_NONBLOCK | SFD_CLOEXEC);
|
||||||
if (ld->signal_read_fd == -1) return false;
|
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;
|
if (!self_pipe(ld->signal_fds, true)) return false;
|
||||||
signal_write_fd = ld->signal_fds[1];
|
signal_write_fd = ld->signal_fds[1];
|
||||||
ld->signal_read_fd = ld->signal_fds[0];
|
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; }
|
for (size_t i = 0; i < ld->num_handled_signals; i++) { if (sigaction(ld->handled_signals[i], &act, NULL) != 0) return false; }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -34,9 +34,8 @@ typedef struct {
|
|||||||
#endif
|
#endif
|
||||||
#ifndef HAS_SIGNAL_FD
|
#ifndef HAS_SIGNAL_FD
|
||||||
int signal_fds[2];
|
int signal_fds[2];
|
||||||
#else
|
|
||||||
sigset_t signals;
|
|
||||||
#endif
|
#endif
|
||||||
|
sigset_t signals;
|
||||||
int wakeup_read_fd;
|
int wakeup_read_fd;
|
||||||
int signal_read_fd;
|
int signal_read_fd;
|
||||||
int handled_signals[16];
|
int handled_signals[16];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user