mirror of
https://github.com/neovim/neovim.git
synced 2025-10-12 21:06:13 +00:00
wstream: Fix close/free
The current code was leading to an invalid free when the wstream was closed
This commit is contained in:
@@ -72,12 +72,12 @@ WStream * wstream_new(size_t maxmem)
|
|||||||
/// @param wstream The `WStream` instance
|
/// @param wstream The `WStream` instance
|
||||||
void wstream_free(WStream *wstream) {
|
void wstream_free(WStream *wstream) {
|
||||||
if (!wstream->pending_reqs) {
|
if (!wstream->pending_reqs) {
|
||||||
handle_set_wstream((uv_handle_t *)wstream->stream, NULL);
|
|
||||||
if (wstream->free_handle) {
|
if (wstream->free_handle) {
|
||||||
uv_close((uv_handle_t *)wstream->stream, close_cb);
|
uv_close((uv_handle_t *)wstream->stream, close_cb);
|
||||||
|
} else {
|
||||||
|
handle_set_wstream((uv_handle_t *)wstream->stream, NULL);
|
||||||
|
free(wstream);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(wstream);
|
|
||||||
} else {
|
} else {
|
||||||
wstream->freed = true;
|
wstream->freed = true;
|
||||||
}
|
}
|
||||||
@@ -238,12 +238,7 @@ static void release_wbuffer(WBuffer *buffer)
|
|||||||
|
|
||||||
static void close_cb(uv_handle_t *handle)
|
static void close_cb(uv_handle_t *handle)
|
||||||
{
|
{
|
||||||
WStream *wstream = handle_get_wstream(handle);
|
free(handle_get_wstream(handle));
|
||||||
|
|
||||||
if (wstream) {
|
|
||||||
free(wstream);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(handle->data);
|
free(handle->data);
|
||||||
free(handle);
|
free(handle);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user