diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2023-04-09 12:37:14 +0200 |
---|---|---|
committer | Rafael Marçalo <raroma09@gmail.com> | 2023-04-09 16:05:14 +0100 |
commit | 517db65affb6520ab2ec86702a29097fed808649 (patch) | |
tree | ae181bf2493bc9deec5aa5b117528e7f75b9c175 /dwm.c | |
parent | 80cd0c09bd19b0d7ff27c283ff24c281d4a6cdd0 (diff) |
restore SIGCHLD sighandler to default before spawning a program
From sigaction(2):
A child created via fork(2) inherits a copy of its parent's signal dispositions.
During an execve(2), the dispositions of handled signals are reset to the default;
the dispositions of ignored signals are left unchanged.
This refused to start directly some programs from configuring in config.h:
static Key keys[] = {
MODKEY, XK_o, spawn, {.v = cmd } },
};
Some reported programs that didn't start were: mpv, anki, dmenu_extended.
Reported by pfx.
Initial patch suggestion by Storkman.
Diffstat (limited to 'dwm.c')
-rw-r--r-- | dwm.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -1832,10 +1832,20 @@ sigterm(int unused) void spawn(const Arg *arg) { + struct sigaction sa; + + if (arg->v == dmenucmd) + dmenumon[0] = '0' + selmon->num; if (fork() == 0) { if (dpy) close(ConnectionNumber(dpy)); setsid(); + + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = SIG_DFL; + sigaction(SIGCHLD, &sa, NULL); + execvp(((char **)arg->v)[0], (char **)arg->v); die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]); } |