aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2014-05-25 23:50:35 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2014-05-25 23:52:19 +0300
commitde634de699dffb2d2967cbe123cee1716ea26ba0 (patch)
tree3905b3c2a4a5368002809d661e9a550eb111134c
parent66cf9b0675fd18b34983fbbf0fa9313825d0a31a (diff)
downloadlibuvh-de634de699dffb2d2967cbe123cee1716ea26ba0.tar.gz
libuvh-de634de699dffb2d2967cbe123cee1716ea26ba0.zip
fix memory leaks in examples
-rw-r--r--examples/chunked.c4
-rw-r--r--examples/fileserver.c44
-rw-r--r--examples/hello.c2
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: