From 7cccad8512b5e2ea7fa37e7551135ff5a8165fab Mon Sep 17 00:00:00 2001 From: Oskari Timperi Date: Sun, 25 May 2014 13:06:30 +0300 Subject: add callback to uv_close() calls --- src/uvh.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/uvh.c b/src/uvh.c index 04fa1dc..4366967 100644 --- a/src/uvh.c +++ b/src/uvh.c @@ -44,6 +44,7 @@ static struct http_status_code_def http_status_code_defs[] = static void on_connection(uv_stream_t *stream, int status); static uv_buf_t alloc_cb(uv_handle_t *, size_t size); static void read_cb(uv_stream_t *stream, ssize_t nread, uv_buf_t buf); +static void close_cb(uv_handle_t *handle); static int on_message_begin(http_parser *parser); static int on_url(http_parser *parser, const char *at, size_t len); @@ -254,7 +255,7 @@ static void read_cb(uv_stream_t *stream, ssize_t nread, uv_buf_t buf) &serverp->http_parser_settings, NULL, 0); } - uv_close((uv_handle_t *) stream, NULL); + uv_close((uv_handle_t *) stream, &close_cb); return; } @@ -274,12 +275,33 @@ static void read_cb(uv_stream_t *stream, ssize_t nread, uv_buf_t buf) if (nparsed != nread) { LOG_ERROR("http parse error, closing connection"); - uv_close((uv_handle_t *) stream, NULL); + uv_close((uv_handle_t *) stream, &close_cb); } free(buf.base); } +static void close_cb(uv_handle_t *handle) +{ + LOG_DEBUG("%s", __FUNCTION__); + + struct uvh_request_private *p; + + p = (struct uvh_request_private *) handle->data; + + sdsfree((sds) p->req.method); + sdsfree((sds) p->req.version); + sdsfree((sds) p->req.url.full); + sdsfree((sds) p->req.url.schema); + sdsfree((sds) p->req.url.host); + sdsfree((sds) p->req.url.port); + sdsfree((sds) p->req.url.path); + sdsfree((sds) p->req.url.query); + sdsfree((sds) p->req.url.fragment); + sdsfree((sds) p->req.url.userinfo); + sdsfree((sds) p->req.content); +} + static int on_message_begin(http_parser *parser) { struct uvh_request_private *priv; -- cgit v1.2.3