diff options
author | 2020-06-01 09:43:00 +0000 | |
---|---|---|
committer | 2020-06-01 09:43:00 +0000 | |
commit | a34cf9c854af10b16e42da7f8b8e02d14cf4d44e (patch) | |
tree | fdfafcc3f79b8a18ea3700b43f7f2428263e0174 /usr.bin/tmux/window.c | |
parent | Revert "Ignore new Rxblock ack agreements until the WPA handshake is done." (diff) | |
download | wireguard-openbsd-a34cf9c854af10b16e42da7f8b8e02d14cf4d44e.tar.xz wireguard-openbsd-a34cf9c854af10b16e42da7f8b8e02d14cf4d44e.zip |
Instead of sending all data to control mode clients as fast as possible,
add a limit of how much data will be sent to the client and try to use
it for panes with some degree of fairness. GitHub issue 2217, with
George Nachman.
Diffstat (limited to 'usr.bin/tmux/window.c')
-rw-r--r-- | usr.bin/tmux/window.c | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 1d9fcf8873a..b679fe639fd 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.263 2020/05/21 07:24:13 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.264 2020/06/01 09:43:01 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -944,16 +944,17 @@ window_pane_read_callback(__unused struct bufferevent *bufev, void *data) new_data = window_pane_get_new_data(wp, wpo, &new_size); if (new_size > 0) { bufferevent_write(wp->pipe_event, new_data, new_size); - window_pane_update_used_data(wp, wpo, new_size, 1); + window_pane_update_used_data(wp, wpo, new_size); } } log_debug("%%%u has %zu bytes", wp->id, size); TAILQ_FOREACH(c, &clients, entry) { - if (c->session != NULL && c->flags & CLIENT_CONTROL) + if (c->session != NULL && (c->flags & CLIENT_CONTROL)) control_write_output(c, wp); } input_parse_pane(wp); + bufferevent_disable(wp->event, EV_READ); } static void @@ -978,7 +979,6 @@ window_pane_set_event(struct window_pane *wp) NULL, window_pane_error_callback, wp); wp->ictx = input_init(wp, wp->event); - bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); bufferevent_enable(wp->event, EV_READ|EV_WRITE); } @@ -1559,27 +1559,11 @@ window_pane_get_new_data(struct window_pane *wp, void window_pane_update_used_data(struct window_pane *wp, - struct window_pane_offset *wpo, size_t size, int acknowledge) + struct window_pane_offset *wpo, size_t size) { size_t used = wpo->used - wp->base_offset; if (size > EVBUFFER_LENGTH(wp->event->input) - used) size = EVBUFFER_LENGTH(wp->event->input) - used; wpo->used += size; - - if (acknowledge) - window_pane_acknowledge_data(wp, wpo, size); -} - -void -window_pane_acknowledge_data(struct window_pane *wp, - struct window_pane_offset *wpo, size_t size) -{ - size_t acknowledged = wpo->acknowledged - wp->base_offset; - - if (size > EVBUFFER_LENGTH(wp->event->input) - acknowledged) - size = EVBUFFER_LENGTH(wp->event->input) - acknowledged; - wpo->acknowledged += size; - if (wpo->acknowledged > wpo->used) - wpo->acknowledged = wpo->used; } |