Reset signal mask before executing commands (issue #674)
o9000 mrovi9000@gmail.com
3 files changed,
13 insertions(+),
0 deletions(-)
M
src/signals.c
→
src/signals.c
@@ -24,6 +24,16 @@ // signal handler is light as it should be
signal_pending = sig; } +void reset_signals() +{ + for (int sig = 1; sig < 32; sig++) { + signal(sig, SIG_DFL); + } + sigset_t signal_set; + sigemptyset(&signal_set); + sigprocmask(SIG_SETMASK, &signal_set, NULL); +} + void init_signals() { // Set signal handlers
M
src/signals.h
→
src/signals.h
@@ -5,6 +5,7 @@ void init_signals();
void init_signals_postconfig(); void emit_self_restart(const char *reason); int get_signal_pending(); +void reset_signals(); void handle_sigchld_events();
M
src/util/common.c
→
src/util/common.c
@@ -59,6 +59,7 @@ #endif
#include "../panel.h" #include "timer.h" +#include "signals.h" void write_string(int fd, const char *s) {@@ -398,6 +399,7 @@ // Run the command
if (dir) chdir(dir); close_all_fds(); + reset_signals(); if (terminal) { #if !defined(__OpenBSD__) fprintf(stderr, "tint2: executing in x-terminal-emulator: %s\n", command);