aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-09-09 15:49:03 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-09-12 13:25:28 -0300
commit03f4d17fc9d72c8862daf575804e0104e3aeb31b (patch)
tree0b9c25d6b3a21b14d6a85c636b0edc47113f8f0f /src
parent3f15d34056fa5f8bc4d97efffc3f239aa68395d0 (diff)
downloadrneovim-03f4d17fc9d72c8862daf575804e0104e3aeb31b.tar.gz
rneovim-03f4d17fc9d72c8862daf575804e0104e3aeb31b.tar.bz2
rneovim-03f4d17fc9d72c8862daf575804e0104e3aeb31b.zip
wstream: Fix close/free
The current code was leading to an invalid free when the wstream was closed
Diffstat (limited to 'src')
-rw-r--r--src/nvim/os/wstream.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/nvim/os/wstream.c b/src/nvim/os/wstream.c
index 44463c7c88..00a53d1628 100644
--- a/src/nvim/os/wstream.c
+++ b/src/nvim/os/wstream.c
@@ -72,12 +72,12 @@ WStream * wstream_new(size_t maxmem)
/// @param wstream The `WStream` instance
void wstream_free(WStream *wstream) {
if (!wstream->pending_reqs) {
- handle_set_wstream((uv_handle_t *)wstream->stream, NULL);
if (wstream->free_handle) {
uv_close((uv_handle_t *)wstream->stream, close_cb);
+ } else {
+ handle_set_wstream((uv_handle_t *)wstream->stream, NULL);
+ free(wstream);
}
-
- free(wstream);
} else {
wstream->freed = true;
}
@@ -238,12 +238,7 @@ static void release_wbuffer(WBuffer *buffer)
static void close_cb(uv_handle_t *handle)
{
- WStream *wstream = handle_get_wstream(handle);
-
- if (wstream) {
- free(wstream);
- }
-
+ free(handle_get_wstream(handle));
free(handle->data);
free(handle);
}