Reset signal mask before executing commands (issue #674)
This commit is contained in:
@@ -24,6 +24,16 @@ void signal_handler(int sig)
|
|||||||
signal_pending = sig;
|
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()
|
void init_signals()
|
||||||
{
|
{
|
||||||
// Set signal handlers
|
// Set signal handlers
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ void init_signals();
|
|||||||
void init_signals_postconfig();
|
void init_signals_postconfig();
|
||||||
void emit_self_restart(const char *reason);
|
void emit_self_restart(const char *reason);
|
||||||
int get_signal_pending();
|
int get_signal_pending();
|
||||||
|
void reset_signals();
|
||||||
|
|
||||||
void handle_sigchld_events();
|
void handle_sigchld_events();
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@
|
|||||||
|
|
||||||
#include "../panel.h"
|
#include "../panel.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
#include "signals.h"
|
||||||
|
|
||||||
void write_string(int fd, const char *s)
|
void write_string(int fd, const char *s)
|
||||||
{
|
{
|
||||||
@@ -398,6 +399,7 @@ pid_t tint_exec(const char *command,
|
|||||||
if (dir)
|
if (dir)
|
||||||
chdir(dir);
|
chdir(dir);
|
||||||
close_all_fds();
|
close_all_fds();
|
||||||
|
reset_signals();
|
||||||
if (terminal) {
|
if (terminal) {
|
||||||
#if !defined(__OpenBSD__)
|
#if !defined(__OpenBSD__)
|
||||||
fprintf(stderr, "tint2: executing in x-terminal-emulator: %s\n", command);
|
fprintf(stderr, "tint2: executing in x-terminal-emulator: %s\n", command);
|
||||||
|
|||||||
Reference in New Issue
Block a user