spawn/slave: restore signal mask after fork

slave: no need to restore signal handlers; they are automatically
restored as long as they are not SIG_IGN (which they never are in
foot).

spawn(): restore signal mask after fork. This fixes an issue where a
terminal spawned with ctrl+shift+n did not terminate when its shell
exited.

Closes #366
This commit is contained in:
Daniel Eklöf 2021-02-21 11:57:38 +01:00
parent 34f89fbe72
commit dd5c31657e
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 15 additions and 8 deletions

View file

@ -274,15 +274,10 @@ slave_spawn(int ptmx, int argc, const char *cwd, char *const *argv,
_exit(_errno);
}
/* Restore signals */
/* Restore signal mask */
sigset_t mask;
sigemptyset(&mask);
const struct sigaction sa = {.sa_handler = SIG_DFL};
if (sigaction(SIGINT, &sa, NULL) < 0 ||
sigaction(SIGTERM, &sa, NULL) < 0 ||
sigaction(SIGHUP, &sa, NULL) < 0 ||
sigprocmask(SIG_SETMASK, &mask, NULL) < 0)
{
if (sigprocmask(SIG_SETMASK, &mask, NULL) < 0) {
const int _errno = errno;
LOG_ERRNO_P(errno, "failed to restore signals");
(void)!write(fork_pipe[1], &_errno, sizeof(_errno));