Mercurial > dovecot > core-2.2
changeset 19822:554ef83e133c
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.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 22 Feb 2016 21:17:26 +0200 |
parents | f48a7703d596 |
children | 34733f49f6e2 |
files | 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 |
diffstat | 7 files changed, 14 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-http/http-client-peer.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-client-peer.c Mon Feb 22 21:17:26 2016 +0200 @@ -503,6 +503,8 @@ { struct http_client_peer *peer = *_peer; + *_peer = NULL; + if (peer->destroyed) return; peer->destroyed = TRUE; @@ -524,7 +526,6 @@ i_free(peer->addr_name); i_free(peer); - *_peer = NULL; } struct http_client_peer *
--- a/src/lib-http/http-client.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-client.c Mon Feb 22 21:17:26 2016 +0200 @@ -166,6 +166,8 @@ 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 @@ 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)
--- a/src/lib-http/http-header-parser.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-header-parser.c Mon Feb 22 21:17:26 2016 +0200 @@ -69,11 +69,12 @@ { 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)
--- a/src/lib-http/http-request-parser.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-request-parser.c Mon Feb 22 21:17:26 2016 +0200 @@ -74,9 +74,9 @@ { struct http_request_parser *parser = *_parser; - http_message_parser_deinit(&parser->parser); + *_parser = NULL; - *_parser = NULL; + http_message_parser_deinit(&parser->parser); i_free(parser); }
--- a/src/lib-http/http-response-parser.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-response-parser.c Mon Feb 22 21:17:26 2016 +0200 @@ -46,9 +46,9 @@ { struct http_response_parser *parser = *_parser; - http_message_parser_deinit(&parser->parser); + *_parser = NULL; - *_parser = NULL; + http_message_parser_deinit(&parser->parser); i_free(parser); }
--- a/src/lib-http/http-server-response.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-server-response.c Mon Feb 22 21:17:26 2016 +0200 @@ -459,10 +459,10 @@ 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
--- a/src/lib-http/http-server.c Mon Feb 22 21:15:37 2016 +0200 +++ b/src/lib-http/http-server.c Mon Feb 22 21:17:26 2016 +0200 @@ -45,12 +45,13 @@ { 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)