mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Drain notifys once at the end of the server loop instead of doing it
from the end of every command queue (which could be nested).
This commit is contained in:
		@@ -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)
 | 
			
		||||
@@ -296,9 +294,7 @@ empty:
 | 
			
		||||
	empty = 1;
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
	notify_enable();
 | 
			
		||||
	cmdq_free(cmdq);
 | 
			
		||||
 | 
			
		||||
	return (empty);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								notify.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								notify.c
									
									
									
									
									
								
							@@ -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)
 | 
			
		||||
@@ -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, ¬ify_queue, entry, ne1) {
 | 
			
		||||
		switch (ne->type) {
 | 
			
		||||
		case NOTIFY_WINDOW_LAYOUT_CHANGED:
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								server.c
									
									
									
									
									
								
							@@ -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))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							@@ -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 *);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user