aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2018-11-08 23:48:34 +0100
committerGitHub <noreply@github.com>2018-11-08 23:48:34 +0100
commit16bc1e9c17824e3a68f3b93152fc6f98583f6d58 (patch)
tree6d7fb1f1b9b166761508fc1bf77beac24c0cb4e3 /src
parentd36afafc8dc7f89f91a13509be8cad7277d7f4a0 (diff)
parent312afd8e2e777707401c9305ad450deb2bc08e1b (diff)
downloadrneovim-16bc1e9c17824e3a68f3b93152fc6f98583f6d58.tar.gz
rneovim-16bc1e9c17824e3a68f3b93152fc6f98583f6d58.tar.bz2
rneovim-16bc1e9c17824e3a68f3b93152fc6f98583f6d58.zip
Merge pull request #9218 from bfredl/termbuf
channel: avoid buffering output when only terminal and no callbacks are active
Diffstat (limited to 'src')
-rw-r--r--src/nvim/channel.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/nvim/channel.c b/src/nvim/channel.c
index 58a34acb22..e191f838e0 100644
--- a/src/nvim/channel.c
+++ b/src/nvim/channel.c
@@ -607,12 +607,15 @@ static void on_channel_output(Stream *stream, Channel *chan, RBuffer *buf,
}
rbuffer_consumed(buf, count);
- // if buffer wasn't consumed, a pending callback is stalled. Aggregate the
- // received data and avoid a "burst" of multiple callbacks.
- bool buffer_set = reader->buffer.ga_len > 0;
- ga_concat_len(&reader->buffer, ptr, count);
- if (!reader->buffered && !buffer_set && callback_reader_set(*reader)) {
- process_channel_event(chan, &reader->cb, type, reader, 0);
+
+ if (callback_reader_set(*reader) || reader->buffered) {
+ // if buffer wasn't consumed, a pending callback is stalled. Aggregate the
+ // received data and avoid a "burst" of multiple callbacks.
+ bool buffer_set = reader->buffer.ga_len > 0;
+ ga_concat_len(&reader->buffer, ptr, count);
+ if (callback_reader_set(*reader) && !reader->buffered && !buffer_set) {
+ process_channel_event(chan, &reader->cb, type, reader, 0);
+ }
}
}