diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-25 23:50:35 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-25 23:52:19 +0300 |
| commit | de634de699dffb2d2967cbe123cee1716ea26ba0 (patch) | |
| tree | 3905b3c2a4a5368002809d661e9a550eb111134c /examples | |
| parent | 66cf9b0675fd18b34983fbbf0fa9313825d0a31a (diff) | |
| download | libuvh-de634de699dffb2d2967cbe123cee1716ea26ba0.tar.gz libuvh-de634de699dffb2d2967cbe123cee1716ea26ba0.zip | |
fix memory leaks in examples
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/chunked.c | 4 | ||||
| -rw-r--r-- | examples/fileserver.c | 44 | ||||
| -rw-r--r-- | examples/hello.c | 2 |
3 files changed, 32 insertions, 18 deletions
diff --git a/examples/chunked.c b/examples/chunked.c index ba8f71b..cf00aa5 100644 --- a/examples/chunked.c +++ b/examples/chunked.c @@ -45,7 +45,7 @@ int request_handler(struct uvh_request *req) { uvh_request_write_status(req, HTTP_NOT_FOUND); uvh_request_end(req); - return; + return 0; } struct chunker *chunker = calloc(1, sizeof(*chunker)); @@ -84,6 +84,8 @@ int main() printf("done\n"); + uvh_server_free(server); + return 0; error: diff --git a/examples/fileserver.c b/examples/fileserver.c index 9e3027e..a61af75 100644 --- a/examples/fileserver.c +++ b/examples/fileserver.c @@ -71,6 +71,12 @@ void on_readdir(uv_fs_t *req) uvh_request_writef(dirreq->req, "%s", "</ul></body></html>"); uvh_request_end(dirreq->req); + + uv_fs_req_cleanup(req); + + sdsfree(dirreq->real_path); + sdsfree(dirreq->req_path); + free(dirreq); } void handle_dir(struct uvh_request *req, sds req_path, sds real_path) @@ -95,29 +101,26 @@ void on_read(uv_fs_t *req) printf("on_read: result: %d\n", (int)req->result); - if (req->result == 0) - { - // eof - uv_fs_t close_req; - uv_fs_close(req->loop, &close_req, chunker->open_req.result, NULL); - - uvh_request_write(chunker->req, NULL, 0); - } - else if (req->result < 0) - { - // error - uv_fs_t close_req; - uv_fs_close(req->loop, &close_req, chunker->open_req.result, NULL); - - uvh_request_write(chunker->req, NULL, 0); - } - else + if (req->result > 0) { uvh_request_write(chunker->req, chunker->buffer, req->result); uv_fs_read(req->loop, &chunker->read_req, chunker->open_req.result, chunker->buffer, MAX_CHUNK, -1, &on_read); + + return; } + + // error or eof + + uv_fs_t close_req; + uv_fs_close(req->loop, &close_req, chunker->open_req.result, NULL); + + uvh_request_write(chunker->req, NULL, 0); + + sdsfree(chunker->req_path); + sdsfree(chunker->real_path); + free(chunker); } void on_open(uv_fs_t *req) @@ -129,6 +132,8 @@ void on_open(uv_fs_t *req) fprintf(stderr, "error opening: %s\n", chunker->real_path); uvh_request_write_status(chunker->req, HTTP_INTERNAL_SERVER_ERROR); uvh_request_end(chunker->req); + sdsfree(chunker->req_path); + sdsfree(chunker->real_path); free(chunker); } else @@ -187,6 +192,8 @@ int request_handler(struct uvh_request *req) } else { + sdsfree(real_path); + sdsfree(req_path); uvh_request_write_status(req, HTTP_NOT_FOUND); uvh_request_end(req); } @@ -238,6 +245,9 @@ int main(int argc, char **argv) printf("done\n"); + uvh_server_free(server); + sdsfree(fileserver.root); + return 0; error: diff --git a/examples/hello.c b/examples/hello.c index 7f18f79..0c16fb5 100644 --- a/examples/hello.c +++ b/examples/hello.c @@ -59,6 +59,8 @@ int main() printf("done\n"); + uvh_server_free(server); + return 0; error: |
