aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/os/wstream.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/nvim/os/wstream.c b/src/nvim/os/wstream.c
index 5c10401958..13b8e8d9dc 100644
--- a/src/nvim/os/wstream.c
+++ b/src/nvim/os/wstream.c
@@ -100,8 +100,7 @@ bool wstream_write(WStream *wstream, WBuffer *buffer)
buffer->refcount++;
if (wstream->curmem > wstream->maxmem) {
- release_wbuffer(buffer);
- return false;
+ goto err;
}
wstream->curmem += buffer->size;
@@ -113,9 +112,16 @@ bool wstream_write(WStream *wstream, WBuffer *buffer)
uvbuf.base = buffer->data;
uvbuf.len = buffer->size;
wstream->pending_reqs++;
- uv_write(req, wstream->stream, &uvbuf, 1, write_cb);
+
+ if (uv_write(req, wstream->stream, &uvbuf, 1, write_cb)) {
+ goto err;
+ }
return true;
+
+err:
+ release_wbuffer(buffer);
+ return false;
}
/// Creates a WBuffer object for holding output data. Instances of this