diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2018-11-08 23:48:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-08 23:48:34 +0100 |
commit | 16bc1e9c17824e3a68f3b93152fc6f98583f6d58 (patch) | |
tree | 6d7fb1f1b9b166761508fc1bf77beac24c0cb4e3 /src | |
parent | d36afafc8dc7f89f91a13509be8cad7277d7f4a0 (diff) | |
parent | 312afd8e2e777707401c9305ad450deb2bc08e1b (diff) | |
download | rneovim-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.c | 15 |
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); + } } } |