aboutsummaryrefslogtreecommitdiff
path: root/src/os/rstream.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/rstream.c')
-rw-r--r--src/os/rstream.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/os/rstream.c b/src/os/rstream.c
index 63dfb2aa39..d1468cf764 100644
--- a/src/os/rstream.c
+++ b/src/os/rstream.c
@@ -28,6 +28,7 @@ struct rstream {
static void alloc_cb(uv_handle_t *, size_t, uv_buf_t *);
static void read_cb(uv_stream_t *, ssize_t, const uv_buf_t *);
static void fread_idle_cb(uv_idle_t *);
+static void close_cb(uv_handle_t *handle);
static void emit_read_event(RStream *rstream, bool eof);
RStream * rstream_new(rstream_cb cb,
@@ -53,11 +54,9 @@ void rstream_free(RStream *rstream)
{
if (rstream->free_handle) {
if (rstream->fread_idle != NULL) {
- uv_close((uv_handle_t *)rstream->fread_idle, NULL);
- free(rstream->fread_idle);
+ uv_close((uv_handle_t *)rstream->fread_idle, close_cb);
} else {
- uv_close((uv_handle_t *)rstream->stream, NULL);
- free(rstream->stream);
+ uv_close((uv_handle_t *)rstream->stream, close_cb);
}
}
@@ -79,11 +78,9 @@ void rstream_set_file(RStream *rstream, uv_file file)
// If this is the second time we're calling this function, free the
// previously allocated memory
if (rstream->fread_idle != NULL) {
- uv_close((uv_handle_t *)rstream->fread_idle, NULL);
- free(rstream->fread_idle);
+ uv_close((uv_handle_t *)rstream->fread_idle, close_cb);
} else {
- uv_close((uv_handle_t *)rstream->stream, NULL);
- free(rstream->stream);
+ uv_close((uv_handle_t *)rstream->stream, close_cb);
}
}
@@ -261,6 +258,11 @@ static void fread_idle_cb(uv_idle_t *handle)
emit_read_event(rstream, false);
}
+static void close_cb(uv_handle_t *handle)
+{
+ free(handle);
+}
+
static void emit_read_event(RStream *rstream, bool eof)
{
if (rstream->async) {