=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-pipe-pane.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- src/usr.bin/tmux/cmd-pipe-pane.c 2017/07/12 09:24:17 1.44 +++ src/usr.bin/tmux/cmd-pipe-pane.c 2017/07/12 10:04:51 1.45 @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-pipe-pane.c,v 1.44 2017/07/12 09:24:17 nicm Exp $ */ +/* $OpenBSD: cmd-pipe-pane.c,v 1.45 2017/07/12 10:04:51 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -62,6 +63,7 @@ char *cmd; int old_fd, pipe_fd[2], null_fd; struct format_tree *ft; + sigset_t set, oldset; /* Destroy the old pipe. */ old_fd = wp->pipe_fd; @@ -102,16 +104,20 @@ format_free(ft); /* Fork the child. */ + sigfillset(&set); + sigprocmask(SIG_BLOCK, &set, &oldset); switch (fork()) { case -1: + sigprocmask(SIG_SETMASK, &oldset, NULL); cmdq_error(item, "fork error: %s", strerror(errno)); free(cmd); return (CMD_RETURN_ERROR); case 0: /* Child process. */ - close(pipe_fd[0]); proc_clear_signals(server_proc); + sigprocmask(SIG_SETMASK, &oldset, NULL); + close(pipe_fd[0]); if (dup2(pipe_fd[1], STDIN_FILENO) == -1) _exit(1); @@ -132,6 +138,7 @@ _exit(1); default: /* Parent process. */ + sigprocmask(SIG_SETMASK, &oldset, NULL); close(pipe_fd[1]); wp->pipe_fd = pipe_fd[0];