commit e81f17d4c196aaed6893fd4beed49991caa3e2a4
parent 348f6559ab0d4793db196ffa56ba96ab95a594a6
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 9 Apr 2023 12:37:14 +0200
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:
1 file changed, 8 insertions(+), 0 deletions(-)
diff --git a/dwm.c b/dwm.c
@@ -1647,12 +1647,20 @@ showhide(Client *c)
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]);
}