mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-29 07:58:01 -04:00
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:
parent
34f89fbe72
commit
dd5c31657e
4 changed files with 15 additions and 8 deletions
9
slave.c
9
slave.c
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue