From 761bd3c9e3abd835086fad770e32d00642b74591 Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Wed, 11 Aug 2010 22:16:04 +0000 Subject: Sync OpenBSD patchset 745: Change the way backoff works. Instead of stopping reading from the pty when the client tty backs up too much, just stop updating the tty and only update the internal screen. Then when the tty recovers, force a redraw. This prevents a dodgy client from causing other clients to go into backoff while still allowing tmux to be responsive (locally) when seeing lots of output. --- server-window.c | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) (limited to 'server-window.c') diff --git a/server-window.c b/server-window.c index dc3464bf..a0d4e737 100644 --- a/server-window.c +++ b/server-window.c @@ -1,4 +1,4 @@ -/* $Id: server-window.c,v 1.16 2010-07-20 17:36:41 tcunha Exp $ */ +/* $Id: server-window.c,v 1.17 2010-08-11 22:16:03 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -29,31 +29,6 @@ int server_window_check_activity(struct session *, struct winlink *); int server_window_check_content( struct session *, struct winlink *, struct window_pane *); -/* Check if this window should suspend reading. */ -int -server_window_backoff(struct window_pane *wp) -{ - struct client *c; - u_int i; - - if (!window_pane_visible(wp)) - return (0); - - for (i = 0; i < ARRAY_LENGTH(&clients); i++) { - c = ARRAY_ITEM(&clients, i); - if (c == NULL || c->session == NULL) - continue; - if ((c->flags & (CLIENT_SUSPENDED|CLIENT_DEAD)) != 0) - continue; - if (c->session->curw->window != wp->window) - continue; - - if (EVBUFFER_LENGTH(c->tty.event->output) > BACKOFF_THRESHOLD) - return (1); - } - return (0); -} - /* Window functions that need to happen every loop. */ void server_window_loop(void) @@ -69,17 +44,6 @@ server_window_loop(void) if (w == NULL) continue; - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp->fd == -1) - continue; - if (!(wp->flags & PANE_FREEZE)) { - if (server_window_backoff(wp)) - bufferevent_disable(wp->event, EV_READ); - else - bufferevent_enable(wp->event, EV_READ); - } - } - for (j = 0; j < ARRAY_LENGTH(&sessions); j++) { s = ARRAY_ITEM(&sessions, j); if (s == NULL) -- cgit