src/server/daemon/sessionhandler.c

changeset 114
c3a0f1275d71
parent 106
b122f34ddc80
child 128
288fd9b9a739
--- 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);

mercurial