aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2017-07-14 22:01:10 +0100
committerThomas Adam <thomas@xteddy.org>2017-07-14 22:01:10 +0100
commitacbbc93501eea6732bdca3ca9f39589b867c6b68 (patch)
tree8cbb581679f054ecebb30070b38c749a2c1faa51
parent1265e212e47ca6cfc05ffbccc1edc079f97de461 (diff)
parent932f6cfbfc98ab2d6e593f7fa3473a6bb3269967 (diff)
downloadrtmux-acbbc93501eea6732bdca3ca9f39589b867c6b68.tar.gz
rtmux-acbbc93501eea6732bdca3ca9f39589b867c6b68.tar.bz2
rtmux-acbbc93501eea6732bdca3ca9f39589b867c6b68.zip
Merge branch 'obsd-master'
-rw-r--r--client.c4
-rw-r--r--cmd-pipe-pane.c2
-rw-r--r--job.c2
-rw-r--r--proc.c12
-rw-r--r--server.c2
-rw-r--r--tmux.h2
-rw-r--r--window.c2
7 files changed, 18 insertions, 8 deletions
diff --git a/client.c b/client.c
index a42a9634..0642bdc4 100644
--- a/client.c
+++ b/client.c
@@ -366,7 +366,6 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
if (client_exittype == MSG_EXEC) {
if (client_flags & CLIENT_CONTROLCONTROL)
tcsetattr(STDOUT_FILENO, TCSAFLUSH, &saved_tio);
- proc_clear_signals(client_proc);
client_exec(client_execshell, client_execcmd);
}
@@ -482,6 +481,8 @@ client_exec(const char *shell, const char *shellcmd)
xasprintf(&argv0, "%s", name);
setenv("SHELL", shell, 1);
+ proc_clear_signals(client_proc, 1);
+
setblocking(STDIN_FILENO, 1);
setblocking(STDOUT_FILENO, 1);
setblocking(STDERR_FILENO, 1);
@@ -629,7 +630,6 @@ client_dispatch_wait(struct imsg *imsg)
if (datalen == 0 || data[datalen - 1] != '\0')
fatalx("bad MSG_SHELL string");
- proc_clear_signals(client_proc);
client_exec(data, shell_command);
/* NOTREACHED */
case MSG_DETACH:
diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c
index 5df2d11f..9c2290d6 100644
--- a/cmd-pipe-pane.c
+++ b/cmd-pipe-pane.c
@@ -114,7 +114,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item)
return (CMD_RETURN_ERROR);
case 0:
/* Child process. */
- proc_clear_signals(server_proc);
+ proc_clear_signals(server_proc, 1);
sigprocmask(SIG_SETMASK, &oldset, NULL);
close(pipe_fd[0]);
diff --git a/job.c b/job.c
index dfe3d691..d8f7a7d8 100644
--- a/job.c
+++ b/job.c
@@ -71,7 +71,7 @@ job_run(const char *cmd, struct session *s, const char *cwd,
close(out[1]);
return (NULL);
case 0:
- proc_clear_signals(server_proc);
+ proc_clear_signals(server_proc, 1);
sigprocmask(SIG_SETMASK, &oldset, NULL);
if (cwd == NULL || chdir(cwd) != 0) {
diff --git a/proc.c b/proc.c
index d3e7dec1..b10d4850 100644
--- a/proc.c
+++ b/proc.c
@@ -240,7 +240,7 @@ proc_set_signals(struct tmuxproc *tp, void (*signalcb)(int))
}
void
-proc_clear_signals(struct tmuxproc *tp)
+proc_clear_signals(struct tmuxproc *tp, int defaults)
{
struct sigaction sa;
@@ -260,6 +260,16 @@ proc_clear_signals(struct tmuxproc *tp)
signal_del(&tp->ev_sigusr1);
signal_del(&tp->ev_sigusr2);
signal_del(&tp->ev_sigwinch);
+
+ if (defaults) {
+ sigaction(SIGHUP, &sa, NULL);
+ sigaction(SIGCHLD, &sa, NULL);
+ sigaction(SIGCONT, &sa, NULL);
+ sigaction(SIGTERM, &sa, NULL);
+ sigaction(SIGUSR1, &sa, NULL);
+ sigaction(SIGUSR2, &sa, NULL);
+ sigaction(SIGWINCH, &sa, NULL);
+ }
}
struct tmuxpeer *
diff --git a/server.c b/server.c
index 1aae5e14..dad28aa5 100644
--- a/server.c
+++ b/server.c
@@ -160,7 +160,7 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd,
close(pair[0]);
if (daemon(1, 0) != 0)
fatal("daemon failed");
- proc_clear_signals(client);
+ proc_clear_signals(client, 0);
if (event_reinit(base) != 0)
fatalx("event_reinit failed");
server_proc = proc_start("server");
diff --git a/tmux.h b/tmux.h
index 291d2bd8..c18958d9 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1503,7 +1503,7 @@ struct tmuxproc *proc_start(const char *);
void proc_loop(struct tmuxproc *, int (*)(void));
void proc_exit(struct tmuxproc *);
void proc_set_signals(struct tmuxproc *, void(*)(int));
-void proc_clear_signals(struct tmuxproc *);
+void proc_clear_signals(struct tmuxproc *, int);
struct tmuxpeer *proc_add_peer(struct tmuxproc *, int,
void (*)(struct imsg *, void *), void *);
void proc_remove_peer(struct tmuxpeer *);
diff --git a/window.c b/window.c
index 9fcf77a2..505be96d 100644
--- a/window.c
+++ b/window.c
@@ -933,7 +933,7 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv,
sigprocmask(SIG_SETMASK, &oldset, NULL);
return (-1);
case 0:
- proc_clear_signals(server_proc);
+ proc_clear_signals(server_proc, 1);
sigprocmask(SIG_SETMASK, &oldset, NULL);
if (chdir(wp->cwd) != 0) {