summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/server.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2017-07-12 09:24:17 +0000
committernicm <nicm@openbsd.org>2017-07-12 09:24:17 +0000
commitc37a9299c66978154a263db533da8c78b8ca496e (patch)
tree665ca843933cf403a521f6c866344529236916d7 /usr.bin/tmux/server.c
parentMake shell_command a global like other stuff rather than making it an (diff)
downloadwireguard-openbsd-c37a9299c66978154a263db533da8c78b8ca496e.tar.xz
wireguard-openbsd-c37a9299c66978154a263db533da8c78b8ca496e.zip
Move signal code into proc.c.
Diffstat (limited to 'usr.bin/tmux/server.c')
-rw-r--r--usr.bin/tmux/server.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/usr.bin/tmux/server.c b/usr.bin/tmux/server.c
index 1b73f315c1f..2ca53f77839 100644
--- a/usr.bin/tmux/server.c
+++ b/usr.bin/tmux/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.173 2017/07/09 22:33:09 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.174 2017/07/12 09:24:17 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -136,7 +136,8 @@ 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;
@@ -144,13 +145,25 @@ server_start(struct event_base *base, int lockfd, char *lockfile)
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) {
+ switch (fork()) {
+ case -1:
+ fatal("fork failed");
+ case 0:
+ break;
+ default:
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);
+
if (log_get_level() > 1)
tty_create_log();
if (pledge("stdio rpath wpath cpath fattr unix getpw recvfd proc exec "