summaryrefslogtreecommitdiff
path: root/tabbed.c
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2023-04-09 12:47:07 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2023-04-09 12:47:07 +0200
commit97ba13b1eb4756fb1a024fd1e83df6e393befd27 (patch)
tree7dbb44ca15b5b57f5674bf863b075a71efc2fb59 /tabbed.c
parent66ef5f33e9987b70e2457c4a459f7ed84184604b (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: Some reported programs that didn't start were: mpv. Similar to the commit e81f17d4c196aaed6893fd4beed49991caa3e2a4 from dwm.
Diffstat (limited to 'tabbed.c')
-rw-r--r--tabbed.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/tabbed.c b/tabbed.c
index 1b61d93..81be5e4 100644
--- a/tabbed.c
+++ b/tabbed.c
@@ -1088,11 +1088,19 @@ setup(void)
void
spawn(const Arg *arg)
{
+ struct sigaction sa;
+
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);
+
if (arg && arg->v) {
execvp(((char **)arg->v)[0], (char **)arg->v);
fprintf(stderr, "%s: execvp %s", argv0,