aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2021-03-02 12:08:34 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2021-03-02 12:08:34 +0000
commitc01251d02388efceca515c47c257e2b5342e3716 (patch)
treeca89407cb43bd2caa40a6854ba49ce1720e892ce /server.c
parent5c275c2a1a963876d4ac392067e42120417dbf43 (diff)
parent1466b570eedda0423d5a386d2b16b7ff0c0e477c (diff)
downloadrtmux-c01251d02388efceca515c47c257e2b5342e3716.tar.gz
rtmux-c01251d02388efceca515c47c257e2b5342e3716.tar.bz2
rtmux-c01251d02388efceca515c47c257e2b5342e3716.zip
Merge branch 'master' into 3.2-rc
Diffstat (limited to 'server.c')
-rw-r--r--server.c30
1 files changed, 8 insertions, 22 deletions
diff --git a/server.c b/server.c
index 9a1875f4..0260898c 100644
--- a/server.c
+++ b/server.c
@@ -24,7 +24,6 @@
#include <sys/wait.h>
#include <errno.h>
-#include <event.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
@@ -155,35 +154,22 @@ int
server_start(struct tmuxproc *client, int flags, struct event_base *base,
int lockfd, char *lockfile)
{
- int pair[2];
- sigset_t set, oldset;
- struct client *c = NULL;
- char *cause = NULL;
+ int fd;
+ sigset_t set, oldset;
+ struct client *c = NULL;
+ char *cause = NULL;
sigfillset(&set);
sigprocmask(SIG_BLOCK, &set, &oldset);
if (~flags & CLIENT_NOFORK) {
- if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0)
- fatal("socketpair failed");
-
- switch (fork()) {
- case -1:
- fatal("fork failed");
- case 0:
- break;
- default:
+ if (proc_fork_and_daemon(&fd) != 0) {
sigprocmask(SIG_SETMASK, &oldset, NULL);
- close(pair[1]);
- return (pair[0]);
+ return (fd);
}
- close(pair[0]);
- if (daemon(1, 0) != 0)
- fatal("daemon failed");
}
-
- server_client_flags = flags;
proc_clear_signals(client, 0);
+ server_client_flags = flags;
if (event_reinit(base) != 0)
fatalx("event_reinit failed");
@@ -212,7 +198,7 @@ server_start(struct tmuxproc *client, int flags, struct event_base *base,
if (server_fd != -1)
server_update_socket();
if (~flags & CLIENT_NOFORK)
- c = server_client_create(pair[1]);
+ c = server_client_create(fd);
else
options_set_number(global_options, "exit-empty", 0);