wstream: Fix close/free

The current code was leading to an invalid free when the wstream was closed
This commit is contained in:
Thiago de Arruda
2014-09-09 15:49:03 -03:00
parent 3f15d34056
commit 03f4d17fc9

View File

@@ -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);
} }