summaryrefslogtreecommitdiff
path: root/dwm.c
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2023-04-09 12:37:14 +0200
committerRafael Marçalo <raroma09@gmail.com>2023-04-09 16:05:14 +0100
commit517db65affb6520ab2ec86702a29097fed808649 (patch)
treeae181bf2493bc9deec5aa5b117528e7f75b9c175 /dwm.c
parent80cd0c09bd19b0d7ff27c283ff24c281d4a6cdd0 (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.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/dwm.c b/dwm.c
index 745c898..8631bee 100644
--- a/dwm.c
+++ b/dwm.c
@@ -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]);
}