diff -r 57e706fed20a -r c3a0f1275d71 src/server/daemon/sessionhandler.c --- a/src/server/daemon/sessionhandler.c Tue Feb 09 22:53:59 2016 +0100 +++ b/src/server/daemon/sessionhandler.c Wed Feb 10 12:19:56 2016 +0100 @@ -70,6 +70,15 @@ close(conn->fd); } +void connection_destroy(Connection *conn) { + if(conn->ssl) { + SSL_free(conn->ssl); + } + conn->close(conn); + + free(conn); +} + SessionHandler* create_basic_session_handler() { BasicSessionHandler *handler = malloc(sizeof(BasicSessionHandler)); handler->threadpool = threadpool_new(4, 8); @@ -108,7 +117,7 @@ int state; int r; r = conn->read(conn, buf->inbuf + buf->pos, buf->maxsize - buf->pos); - if(r == -1) { + if(r <= 0) { // TODO: error handling fprintf(stderr, "%s\n", "Error: Cannot read from socket"); return NULL; @@ -225,7 +234,7 @@ conn, buf->inbuf + buf->pos, buf->maxsize - buf->pos); - if(r == -1) { + if(r <= 0) { event->finish = evt_request_error; return 0; } @@ -286,9 +295,7 @@ * * don't free request->netbuf and request->connection */ - header_array_free(request->headers); - free(request); - + http_request_cleanup(request); http_parser_free(parser); free(io); @@ -302,12 +309,13 @@ HttpParser *parser = io->parser; HTTPRequest *request = io->request; - close(request->connection->fd); - cfg_unref(request->connection->listener->cfg); + free(request->netbuf->inbuf); + free(request->netbuf); - header_array_free(request->headers); - free(request); + cfg_unref(request->connection->listener->cfg); + connection_destroy(request->connection); + http_request_cleanup(request); http_parser_free(parser); free(io);