mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 13:37:12 +00:00
Merge branch 'obsd-master'
Conflicts: cmd-pipe-pane.c proc.c tmux.c window.c
This commit is contained in:
11
job.c
11
job.c
@ -50,6 +50,7 @@ job_run(const char *cmd, struct session *s, const char *cwd,
|
||||
pid_t pid;
|
||||
int nullfd, out[2];
|
||||
const char *home;
|
||||
sigset_t set, oldset;
|
||||
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, out) != 0)
|
||||
return (NULL);
|
||||
@ -60,14 +61,18 @@ job_run(const char *cmd, struct session *s, const char *cwd,
|
||||
*/
|
||||
env = environ_for_session(s, !cfg_finished);
|
||||
|
||||
sigfillset(&set);
|
||||
sigprocmask(SIG_BLOCK, &set, &oldset);
|
||||
switch (pid = fork()) {
|
||||
case -1:
|
||||
sigprocmask(SIG_SETMASK, &oldset, NULL);
|
||||
environ_free(env);
|
||||
close(out[0]);
|
||||
close(out[1]);
|
||||
return (NULL);
|
||||
case 0: /* child */
|
||||
clear_signals(1);
|
||||
case 0:
|
||||
proc_clear_signals(server_proc);
|
||||
sigprocmask(SIG_SETMASK, &oldset, NULL);
|
||||
|
||||
if (cwd == NULL || chdir(cwd) != 0) {
|
||||
if ((home = find_home()) == NULL || chdir(home) != 0)
|
||||
@ -99,7 +104,7 @@ job_run(const char *cmd, struct session *s, const char *cwd,
|
||||
fatal("execl failed");
|
||||
}
|
||||
|
||||
/* parent */
|
||||
sigprocmask(SIG_SETMASK, &oldset, NULL);
|
||||
environ_free(env);
|
||||
close(out[1]);
|
||||
|
||||
|
Reference in New Issue
Block a user