summaryrefslogtreecommitdiffstats
path: root/server.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2017-07-12 13:39:59 +0100
committerThomas Adam <thomas@xteddy.org>2017-07-12 13:43:08 +0100
commit1076a2e26c224d17c32a2d1770997d8718903f20 (patch)
tree2a51f6e719b9cbff0e37d7a887e56992ffb875bd /server.c
parentfbbf5a108b01c742ca11e779845a4d19a1c5edd1 (diff)
parent51112221eeb31ced907f0dfcf077582996c20c07 (diff)
Merge branch 'obsd-master'
Conflicts: cmd-pipe-pane.c proc.c tmux.c window.c
Diffstat (limited to 'server.c')
-rw-r--r--server.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/server.c b/server.c
index ad6ef847..1aae5e14 100644
--- a/server.c
+++ b/server.c
@@ -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();