diff options
-rw-r--r-- | src/nvim/event/rstream.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/nvim/event/rstream.c b/src/nvim/event/rstream.c index 0a720bb852..9f3fbc25ff 100644 --- a/src/nvim/event/rstream.c +++ b/src/nvim/event/rstream.c @@ -177,10 +177,25 @@ static void read_event(void **argv) bool eof = (uintptr_t)argv[2]; stream->read_cb(stream, stream->buffer, count, stream->data, eof); } + stream->pending_reqs--; + if (stream->closed && !stream->pending_reqs) { + stream_close_handle(stream); + } } static void invoke_read_cb(Stream *stream, size_t count, bool eof) { - CREATE_EVENT(stream->events, read_event, 3, stream, - (void *)(uintptr_t *)count, (void *)(uintptr_t)eof); + if (stream->closed) { + return; + } + + // Don't let the stream be closed before the event is processed. + stream->pending_reqs++; + + CREATE_EVENT(stream->events, + read_event, + 3, + stream, + (void *)(uintptr_t *)count, + (void *)(uintptr_t)eof); } |