summaryrefslogtreecommitdiffstats
path: root/window.c
diff options
context:
space:
mode:
authornicm <nicm>2020-06-01 09:43:00 +0000
committernicm <nicm>2020-06-01 09:43:00 +0000
commita54a88edd6fd893d4370feb9f9136e13096b891c (patch)
tree1e42bf42d42c31e1ef3c059aaf1ae25ae6ef3bd5 /window.c
parent175e45005f4572b19a4aa34094f9a8c69ced5475 (diff)
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 'window.c')
-rw-r--r--window.c24
1 files changed, 4 insertions, 20 deletions
diff --git a/window.c b/window.c
index c7a17551..020ae4bf 100644
--- a/window.c
+++ b/window.c
@@ -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;
}