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:
		
							
								
								
									
										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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user