aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server-client.c6
-rw-r--r--server.c10
-rw-r--r--tmux.h2
3 files changed, 11 insertions, 7 deletions
diff --git a/server-client.c b/server-client.c
index 52842e38..fa21fa79 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1511,7 +1511,9 @@ server_client_click_timer(__unused int fd, __unused short events, void *data)
static void
server_client_check_exit(struct client *c)
{
- if (!(c->flags & CLIENT_EXIT))
+ if (~c->flags & CLIENT_EXIT)
+ return;
+ if (c->flags & CLIENT_EXITED)
return;
if (EVBUFFER_LENGTH(c->stdin_data) != 0)
@@ -1524,7 +1526,7 @@ server_client_check_exit(struct client *c)
if (c->flags & CLIENT_ATTACHED)
notify_client("client-detached", c);
proc_send(c->peer, MSG_EXIT, -1, &c->retval, sizeof c->retval);
- c->flags &= ~CLIENT_EXIT;
+ c->flags |= CLIENT_EXITED;
}
/* Redraw timer callback. */
diff --git a/server.c b/server.c
index 18818c38..fc3730ad 100644
--- a/server.c
+++ b/server.c
@@ -44,7 +44,7 @@
struct clients clients;
struct tmuxproc *server_proc;
-static int server_fd;
+static int server_fd = -1;
static int server_exit;
static struct event server_ev_accept;
@@ -208,11 +208,10 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd,
cmdq_append(c, cmdq_get_error(cause));
free(cause);
c->flags |= CLIENT_EXIT;
- }
+ } else
+ start_cfg();
- start_cfg();
server_add_accept(0);
-
proc_loop(server_proc, server_loop);
job_kill_all();
@@ -364,6 +363,9 @@ server_add_accept(int timeout)
{
struct timeval tv = { timeout, 0 };
+ if (server_fd == -1)
+ return;
+
if (event_initialized(&server_ev_accept))
event_del(&server_ev_accept);
diff --git a/tmux.h b/tmux.h
index f8ceb95d..76bf8303 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1490,7 +1490,7 @@ struct client {
#define CLIENT_REPEAT 0x20
#define CLIENT_SUSPENDED 0x40
#define CLIENT_ATTACHED 0x80
-/* 0x100 unused */
+#define CLIENT_EXITED 0x100
#define CLIENT_DEAD 0x200
#define CLIENT_REDRAWBORDERS 0x400
#define CLIENT_READONLY 0x800