diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-25 13:06:30 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-25 13:06:30 +0300 |
| commit | 7cccad8512b5e2ea7fa37e7551135ff5a8165fab (patch) | |
| tree | 302fa154eeb32bbd91e6720ea65cefd49a8f6cd7 /src | |
| parent | 30fdee63b08c10e61343d226e135fd5690174b18 (diff) | |
| download | libuvh-7cccad8512b5e2ea7fa37e7551135ff5a8165fab.tar.gz libuvh-7cccad8512b5e2ea7fa37e7551135ff5a8165fab.zip | |
add callback to uv_close() calls
Diffstat (limited to 'src')
| -rw-r--r-- | src/uvh.c | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -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; |
