Skip to content

Commit

Permalink
Drain notifys once at the end of the server loop instead of doing it
Browse files Browse the repository at this point in the history
from the end of every command queue (which could be nested).
  • Loading branch information
nicm committed Oct 15, 2016
1 parent ed97126 commit 9b3ae84
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 33 deletions.
6 changes: 1 addition & 5 deletions cmd-queue.c
Expand Up @@ -248,10 +248,8 @@ cmdq_continue(struct cmd_q *cmdq)
enum cmd_retval retval;
int empty;

cmdq->references++;
notify_disable();

log_debug("continuing cmdq %p: flags %#x (%p)", cmdq, cmdq->flags, c);
cmdq->references++;

empty = TAILQ_EMPTY(&cmdq->queue);
if (empty)
Expand Down Expand Up @@ -296,9 +294,7 @@ cmdq_continue(struct cmd_q *cmdq)
empty = 1;

out:
notify_enable();
cmdq_free(cmdq);

return (empty);
}

Expand Down
27 changes: 1 addition & 26 deletions notify.c
Expand Up @@ -45,25 +45,10 @@ struct notify_entry {
};
TAILQ_HEAD(notify_queue, notify_entry);
static struct notify_queue notify_queue = TAILQ_HEAD_INITIALIZER(notify_queue);
static int notify_enabled = 1;

static void notify_drain(void);
static void notify_add(enum notify_type, struct client *, struct session *,
struct window *);

void
notify_enable(void)
{
notify_enabled = 1;
notify_drain();
}

void
notify_disable(void)
{
notify_enabled = 0;
}

static void
notify_add(enum notify_type type, struct client *c, struct session *s,
struct window *w)
Expand All @@ -85,14 +70,11 @@ notify_add(enum notify_type type, struct client *c, struct session *s,
w->references++;
}

static void
void
notify_drain(void)
{
struct notify_entry *ne, *ne1;

if (!notify_enabled)
return;

TAILQ_FOREACH_SAFE(ne, &notify_queue, entry, ne1) {
switch (ne->type) {
case NOTIFY_WINDOW_LAYOUT_CHANGED:
Expand Down Expand Up @@ -138,13 +120,6 @@ notify_input(struct window_pane *wp, struct evbuffer *input)
{
struct client *c;

/*
* notify_input() is not queued and only does anything when
* notifications are enabled.
*/
if (!notify_enabled)
return;

TAILQ_FOREACH(c, &clients, entry) {
if (c->flags & CLIENT_CONTROL)
control_notify_input(c, wp, input);
Expand Down
1 change: 1 addition & 0 deletions server.c
Expand Up @@ -192,6 +192,7 @@ server_loop(void)
struct client *c;

server_client_loop();
notify_drain();

if (!options_get_number(global_options, "exit-unattached")) {
if (!RB_EMPTY(&sessions))
Expand Down
3 changes: 1 addition & 2 deletions tmux.h
Expand Up @@ -1577,8 +1577,7 @@ void mode_key_init(struct mode_key_data *, struct mode_key_tree *);
enum mode_key_cmd mode_key_lookup(struct mode_key_data *, key_code);

/* notify.c */
void notify_enable(void);
void notify_disable(void);
void notify_drain(void);
void notify_input(struct window_pane *, struct evbuffer *);
void notify_window_layout_changed(struct window *);
void notify_window_unlinked(struct session *, struct window *);
Expand Down

0 comments on commit 9b3ae84

Please sign in to comment.