From: Timo Sirainen Date: Mon, 22 Feb 2016 19:17:26 +0000 (+0200) Subject: lib-http: Always set *_obj=NULL first in deinit functions (mainly for consistency) X-Git-Tag: 2.2.22.rc1~98 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f9d2a1f21ad65262bc630f0834d7eead06a1bac3;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Always set *_obj=NULL first in deinit functions (mainly for consistency) This doesn't usually matter, but in case deinit calls some callback they may be trying to access the partially destroyed object. --- diff --git a/src/lib-http/http-client-peer.c b/src/lib-http/http-client-peer.c index d74f567bef..d2e000806f 100644 --- a/src/lib-http/http-client-peer.c +++ b/src/lib-http/http-client-peer.c @@ -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 * diff --git a/src/lib-http/http-client.c b/src/lib-http/http-client.c index 8c1df18adf..acafc32cff 100644 --- a/src/lib-http/http-client.c +++ b/src/lib-http/http-client.c @@ -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) diff --git a/src/lib-http/http-header-parser.c b/src/lib-http/http-header-parser.c index 3b3e55428b..88caf63778 100644 --- a/src/lib-http/http-header-parser.c +++ b/src/lib-http/http-header-parser.c @@ -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) diff --git a/src/lib-http/http-request-parser.c b/src/lib-http/http-request-parser.c index 9e2a2cb91a..cdae246ef8 100644 --- a/src/lib-http/http-request-parser.c +++ b/src/lib-http/http-request-parser.c @@ -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); } diff --git a/src/lib-http/http-response-parser.c b/src/lib-http/http-response-parser.c index 12a5e69287..807d75b8fb 100644 --- a/src/lib-http/http-response-parser.c +++ b/src/lib-http/http-response-parser.c @@ -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); } diff --git a/src/lib-http/http-server-response.c b/src/lib-http/http-server-response.c index e2fc03bf73..f837936474 100644 --- a/src/lib-http/http-server-response.c +++ b/src/lib-http/http-server-response.c @@ -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 diff --git a/src/lib-http/http-server.c b/src/lib-http/http-server.c index 6256a1cd4b..7f9f28df4f 100644 --- a/src/lib-http/http-server.c +++ b/src/lib-http/http-server.c @@ -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)