diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2010-08-11 07:34:43 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2010-08-11 07:34:43 +0000 |
commit | 8363e31953a346b3cd4141bf30a8d79d37ca2674 (patch) | |
tree | 1052ae596f467e6f915c555530ce6b64df31e621 /server-window.c | |
parent | 933dc48de356e387c0c027e654e1ae5f2f24c711 (diff) |
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.
Diffstat (limited to 'server-window.c')
-rw-r--r-- | server-window.c | 36 |
1 files changed, 0 insertions, 36 deletions
diff --git a/server-window.c b/server-window.c index f8bf27d8..634a1b8a 100644 --- a/server-window.c +++ b/server-window.c @@ -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) |