mirror of
https://github.com/tmux/tmux.git
synced 2024-12-12 17:38:48 +00:00
Do not load the config file if the server is exiting because it failed
to start, otherwise commands like lsk which start the server again can end up looping infinitely. Also make the first client exit correctly. Problem reported by Wael M Nasreddine.
This commit is contained in:
parent
8f40796f05
commit
e37f34facc
@ -1511,7 +1511,9 @@ server_client_click_timer(__unused int fd, __unused short events, void *data)
|
|||||||
static void
|
static void
|
||||||
server_client_check_exit(struct client *c)
|
server_client_check_exit(struct client *c)
|
||||||
{
|
{
|
||||||
if (!(c->flags & CLIENT_EXIT))
|
if (~c->flags & CLIENT_EXIT)
|
||||||
|
return;
|
||||||
|
if (c->flags & CLIENT_EXITED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (EVBUFFER_LENGTH(c->stdin_data) != 0)
|
if (EVBUFFER_LENGTH(c->stdin_data) != 0)
|
||||||
@ -1524,7 +1526,7 @@ server_client_check_exit(struct client *c)
|
|||||||
if (c->flags & CLIENT_ATTACHED)
|
if (c->flags & CLIENT_ATTACHED)
|
||||||
notify_client("client-detached", c);
|
notify_client("client-detached", c);
|
||||||
proc_send(c->peer, MSG_EXIT, -1, &c->retval, sizeof c->retval);
|
proc_send(c->peer, MSG_EXIT, -1, &c->retval, sizeof c->retval);
|
||||||
c->flags &= ~CLIENT_EXIT;
|
c->flags |= CLIENT_EXITED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Redraw timer callback. */
|
/* Redraw timer callback. */
|
||||||
|
10
server.c
10
server.c
@ -44,7 +44,7 @@
|
|||||||
struct clients clients;
|
struct clients clients;
|
||||||
|
|
||||||
struct tmuxproc *server_proc;
|
struct tmuxproc *server_proc;
|
||||||
static int server_fd;
|
static int server_fd = -1;
|
||||||
static int server_exit;
|
static int server_exit;
|
||||||
static struct event server_ev_accept;
|
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));
|
cmdq_append(c, cmdq_get_error(cause));
|
||||||
free(cause);
|
free(cause);
|
||||||
c->flags |= CLIENT_EXIT;
|
c->flags |= CLIENT_EXIT;
|
||||||
}
|
} else
|
||||||
|
start_cfg();
|
||||||
|
|
||||||
start_cfg();
|
|
||||||
server_add_accept(0);
|
server_add_accept(0);
|
||||||
|
|
||||||
proc_loop(server_proc, server_loop);
|
proc_loop(server_proc, server_loop);
|
||||||
|
|
||||||
job_kill_all();
|
job_kill_all();
|
||||||
@ -364,6 +363,9 @@ server_add_accept(int timeout)
|
|||||||
{
|
{
|
||||||
struct timeval tv = { timeout, 0 };
|
struct timeval tv = { timeout, 0 };
|
||||||
|
|
||||||
|
if (server_fd == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
if (event_initialized(&server_ev_accept))
|
if (event_initialized(&server_ev_accept))
|
||||||
event_del(&server_ev_accept);
|
event_del(&server_ev_accept);
|
||||||
|
|
||||||
|
2
tmux.h
2
tmux.h
@ -1490,7 +1490,7 @@ struct client {
|
|||||||
#define CLIENT_REPEAT 0x20
|
#define CLIENT_REPEAT 0x20
|
||||||
#define CLIENT_SUSPENDED 0x40
|
#define CLIENT_SUSPENDED 0x40
|
||||||
#define CLIENT_ATTACHED 0x80
|
#define CLIENT_ATTACHED 0x80
|
||||||
/* 0x100 unused */
|
#define CLIENT_EXITED 0x100
|
||||||
#define CLIENT_DEAD 0x200
|
#define CLIENT_DEAD 0x200
|
||||||
#define CLIENT_REDRAWBORDERS 0x400
|
#define CLIENT_REDRAWBORDERS 0x400
|
||||||
#define CLIENT_READONLY 0x800
|
#define CLIENT_READONLY 0x800
|
||||||
|
Loading…
Reference in New Issue
Block a user