]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: Always set *_obj=NULL first in deinit functions (mainly for consistency)
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 22 Feb 2016 19:17:26 +0000 (21:17 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 22 Feb 2016 19:17:26 +0000 (21:17 +0200)
This doesn't usually matter, but in case deinit calls some callback they may
be trying to access the partially destroyed object.

src/lib-http/http-client-peer.c
src/lib-http/http-client.c
src/lib-http/http-header-parser.c
src/lib-http/http-request-parser.c
src/lib-http/http-response-parser.c
src/lib-http/http-server-response.c
src/lib-http/http-server.c

index d74f567befff6f848fac62bebb9d39223c78c8aa..d2e000806f93da9ebe388781f762de0090731583 100644 (file)
@@ -503,6 +503,8 @@ void http_client_peer_free(struct http_client_peer **_peer)
 {
        struct http_client_peer *peer = *_peer;
 
+       *_peer = NULL;
+
        if (peer->destroyed)
                return;
        peer->destroyed = TRUE;
@@ -524,7 +526,6 @@ void http_client_peer_free(struct http_client_peer **_peer)
 
        i_free(peer->addr_name);
        i_free(peer);
-       *_peer = NULL;
 }
 
 struct http_client_peer *
index 8c1df18adf73aa6c55ce283bd6c4d10c566d035c..acafc32cffa2eae50ade2a56cb43b9209dc865cc 100644 (file)
@@ -166,6 +166,8 @@ void http_client_deinit(struct http_client **_client)
        struct http_client_host *host;
        struct http_client_peer *peer;
 
+       *_client = NULL;
+
        /* drop delayed failing requests */
        while (array_count(&client->delayed_failing_requests) > 0) {
                req_idx = array_idx(&client->delayed_failing_requests, 0);
@@ -198,7 +200,6 @@ void http_client_deinit(struct http_client **_client)
        if (client->ssl_ctx != NULL)
                ssl_iostream_context_deinit(&client->ssl_ctx);
        pool_unref(&client->pool);
-       *_client = NULL;
 }
 
 void http_client_switch_ioloop(struct http_client *client)
index 3b3e55428b92c6a34d70983bfc38c121dad1618a..88caf63778def48ecc135315f56224b988a920a2 100644 (file)
@@ -69,11 +69,12 @@ void http_header_parser_deinit(struct http_header_parser **_parser)
 {
        struct http_header_parser *parser = *_parser;
 
+       *_parser = NULL;
+
        //i_stream_skip(ctx->input, ctx->skip);
        buffer_free(&parser->value_buf);
        str_free(&parser->name);
        i_free(parser);
-       *_parser = NULL;
 }
 
 void http_header_parser_reset(struct http_header_parser *parser)
index 9e2a2cb91a1076c23173e3545b6b691cf5fc7053..cdae246ef8ea67cd2338d72af7822cb9008db2f1 100644 (file)
@@ -74,9 +74,9 @@ void http_request_parser_deinit(struct http_request_parser **_parser)
 {
        struct http_request_parser *parser = *_parser;
 
-       http_message_parser_deinit(&parser->parser);
-
        *_parser = NULL;
+
+       http_message_parser_deinit(&parser->parser);
        i_free(parser);
 }
 
index 12a5e69287080a6d77f68a602f44dfe9891d4681..807d75b8fb0bc73a1117b92f1de2f12725028bc0 100644 (file)
@@ -46,9 +46,9 @@ void http_response_parser_deinit(struct http_response_parser **_parser)
 {
        struct http_response_parser *parser = *_parser;
 
-       http_message_parser_deinit(&parser->parser);
-
        *_parser = NULL;
+
+       http_message_parser_deinit(&parser->parser);
        i_free(parser);
 }
 
index e2fc03bf732d85e7496e87c0c0f7382b3ef42a24..f8379364740244e45a409c89d9821a208b59a364 100644 (file)
@@ -459,10 +459,10 @@ void http_server_response_abort_payload(struct http_server_response **_resp)
        struct http_server_response *resp = *_resp;
        struct http_server_request *req = resp->request;
 
+       *_resp = NULL;
+
        http_server_request_abort(&req,
                "Aborted sending response payload");
-
-       *_resp = NULL;
 }
 
 static void
index 6256a1cd4ba61ff32f3867ccc9e058af2b036f59..7f9f28df4fceca3405a7e27dc852f420604e079f 100644 (file)
@@ -45,12 +45,13 @@ void http_server_deinit(struct http_server **_server)
 {
        struct http_server *server = *_server;
 
+       *_server = NULL;
+
        connection_list_deinit(&server->conn_list);
 
        if (server->ssl_ctx != NULL)
                ssl_iostream_context_deinit(&server->ssl_ctx);
        pool_unref(&server->pool);
-       *_server = NULL;
 }
 
 void http_server_switch_ioloop(struct http_server *server)