diff options
author | Thomas Adam <thomas@xteddy.org> | 2017-07-12 13:39:59 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2017-07-12 13:43:08 +0100 |
commit | 1076a2e26c224d17c32a2d1770997d8718903f20 (patch) | |
tree | 2a51f6e719b9cbff0e37d7a887e56992ffb875bd /server.c | |
parent | fbbf5a108b01c742ca11e779845a4d19a1c5edd1 (diff) | |
parent | 51112221eeb31ced907f0dfcf077582996c20c07 (diff) | |
download | rtmux-1076a2e26c224d17c32a2d1770997d8718903f20.tar.gz rtmux-1076a2e26c224d17c32a2d1770997d8718903f20.tar.bz2 rtmux-1076a2e26c224d17c32a2d1770997d8718903f20.zip |
Merge branch 'obsd-master'
Conflicts:
cmd-pipe-pane.c
proc.c
tmux.c
window.c
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -135,20 +135,37 @@ server_create_socket(void) /* Fork new server. */ int -server_start(struct event_base *base, int lockfd, char *lockfile) +server_start(struct tmuxproc *client, struct event_base *base, int lockfd, + char *lockfile) { int pair[2]; struct job *job; + sigset_t set, oldset; if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0) fatal("socketpair failed"); - server_proc = proc_start("server", base, 1, server_signal); - if (server_proc == NULL) { + sigfillset(&set); + sigprocmask(SIG_BLOCK, &set, &oldset); + switch (fork()) { + case -1: + fatal("fork failed"); + case 0: + break; + default: + sigprocmask(SIG_SETMASK, &oldset, NULL); close(pair[1]); return (pair[0]); } close(pair[0]); + if (daemon(1, 0) != 0) + fatal("daemon failed"); + proc_clear_signals(client); + if (event_reinit(base) != 0) + fatalx("event_reinit failed"); + server_proc = proc_start("server"); + proc_set_signals(server_proc, server_signal); + sigprocmask(SIG_SETMASK, &oldset, NULL); if (log_get_level() > 1) tty_create_log(); |