diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-09-09 15:49:03 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-09-12 13:25:28 -0300 |
commit | 03f4d17fc9d72c8862daf575804e0104e3aeb31b (patch) | |
tree | 0b9c25d6b3a21b14d6a85c636b0edc47113f8f0f /src | |
parent | 3f15d34056fa5f8bc4d97efffc3f239aa68395d0 (diff) | |
download | rneovim-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.c | 13 |
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); } |