From 9e03df5500f802e0a10d52bfaf51eab493b84c70 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 6 Jul 2022 08:31:59 +0000 Subject: [PATCH] Defer reading from control client until the command line command has completed. --- control.c | 8 +++++++- server-client.c | 5 ++++- tmux.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/control.c b/control.c index 359d0e78..f75035ef 100644 --- a/control.c +++ b/control.c @@ -776,7 +776,6 @@ control_start(struct client *c) cs->read_event = bufferevent_new(c->fd, control_read_callback, control_write_callback, control_error_callback, c); - bufferevent_enable(cs->read_event, EV_READ); if (c->flags & CLIENT_CONTROLCONTROL) cs->write_event = cs->read_event; @@ -793,6 +792,13 @@ control_start(struct client *c) } } +/* Control client ready. */ +void +control_ready(struct client *c) +{ + bufferevent_enable(c->control_state->read_event, EV_READ); +} + /* Discard all output for a client. */ void control_discard(struct client *c) diff --git a/server-client.c b/server-client.c index 7c4c2fdd..864b37b3 100644 --- a/server-client.c +++ b/server-client.c @@ -2791,8 +2791,11 @@ server_client_command_done(struct cmdq_item *item, __unused void *data) if (~c->flags & CLIENT_ATTACHED) c->flags |= CLIENT_EXIT; - else if (~c->flags & CLIENT_EXIT) + else if (~c->flags & CLIENT_EXIT) { + if (c->flags & CLIENT_CONTROL) + control_ready(c); tty_send_requests(&c->tty); + } return (CMD_RETURN_NORMAL); } diff --git a/tmux.h b/tmux.h index 3137ca3b..3f720e50 100644 --- a/tmux.h +++ b/tmux.h @@ -3134,6 +3134,7 @@ char *parse_window_name(const char *); /* control.c */ void control_discard(struct client *); void control_start(struct client *); +void control_ready(struct client *); void control_stop(struct client *); void control_set_pane_on(struct client *, struct window_pane *); void control_set_pane_off(struct client *, struct window_pane *);