diff options
author | Eric Wong <e@80x24.org> | 2016-06-18 10:53:32 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-06-18 21:48:25 +0000 |
commit | e748f75979046724ead380bd00eadc677bdc07e9 (patch) | |
tree | fbcd16686324cc689a1cd1b0de642bc9a9881601 /lib/PublicInbox/Spawn.pm | |
parent | 1701875544e31d77f65cf467a35c8dd2bcebf8fa (diff) | |
download | public-inbox-e748f75979046724ead380bd00eadc677bdc07e9.tar.gz |
While we only want to stop our daemons and gracefully destroy subprocesses, it is common for 'Ctrl-C' from a terminal to kill the entire pgroup. Killing an entire pgroup nukes subprocesses like git-upload-pack breaks graceful shutdown on long clones. Make a best effort to ensure git-upload-pack processes are not broken when somebody signals an entire process group. Followup-to: commit 37bf2db81bbbe114d7fc5a00e30d3d5a6fa74de5 ("doc: systemd examples should only kill one process")
Diffstat (limited to 'lib/PublicInbox/Spawn.pm')
-rw-r--r-- | lib/PublicInbox/Spawn.pm | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/PublicInbox/Spawn.pm b/lib/PublicInbox/Spawn.pm index 66dce335..83730302 100644 --- a/lib/PublicInbox/Spawn.pm +++ b/lib/PublicInbox/Spawn.pm @@ -104,9 +104,11 @@ int public_inbox_fork_exec(int in, int out, int err, REDIR(out, 1); REDIR(err, 2); for (sig = 1; sig < NSIG; sig++) - signal(sig, SIG_DFL); /* ignore errorrs on signals */ - ret = sigprocmask(SIG_SETMASK, &old, NULL); - if (ret != 0) xerr("sigprocmask failed in vfork child"); + signal(sig, SIG_DFL); /* ignore errors on signals */ + /* + * don't bother unblocking, we don't want signals + * to the group taking out a subprocess + */ execve(filename, argv, envp); xerr("execve failed"); } |