From: Stephan Bosch Date: Sat, 27 Oct 2018 09:56:59 +0000 (+0200) Subject: submission: Allocate each backend on its own pool. X-Git-Tag: 2.3.9~1118 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=83fd3b1c9e807889c8e1482a3f23fadea4296c99;p=thirdparty%2Fdovecot%2Fcore.git submission: Allocate each backend on its own pool. This allows allocating per-backend module data. --- diff --git a/src/submission/submission-backend-relay.c b/src/submission/submission-backend-relay.c index 00cf208f13..b1eb42f988 100644 --- a/src/submission/submission-backend-relay.c +++ b/src/submission/submission-backend-relay.c @@ -992,9 +992,11 @@ submission_backend_relay_create( struct mail_user *user = client->user; struct ssl_iostream_settings ssl_set; struct smtp_client_settings smtp_set; + pool_t pool; - backend = i_new(struct submission_backend_relay, 1); - submission_backend_init(&backend->backend, client, + pool = pool_alloconly_create("submission relay backend", 1024); + backend = p_new(pool, struct submission_backend_relay, 1); + submission_backend_init(&backend->backend, pool, client, &backend_relay_vfuncs); i_zero(&ssl_set); @@ -1076,7 +1078,6 @@ static void backend_relay_destroy(struct submission_backend *_backend) smtp_client_transaction_destroy(&backend->trans); if (backend->conn != NULL) smtp_client_connection_close(&backend->conn); - i_free(backend); } static void backend_relay_ready_cb(const struct smtp_reply *reply, diff --git a/src/submission/submission-backend.c b/src/submission/submission-backend.c index a983b5e391..6b8ca05ae2 100644 --- a/src/submission/submission-backend.c +++ b/src/submission/submission-backend.c @@ -11,9 +11,10 @@ #include "submission-backend.h" void submission_backend_init(struct submission_backend *backend, - struct client *client, + pool_t pool, struct client *client, const struct submission_backend_vfuncs *vfunc) { + backend->pool = pool; backend->client = client; backend->v = *vfunc; @@ -32,6 +33,7 @@ static void submission_backend_destroy(struct submission_backend *backend) DLLIST_REMOVE(&client->backends, backend); backend->v.destroy(backend); + pool_unref(&backend->pool); } void submission_backends_destroy_all(struct client *client) diff --git a/src/submission/submission-backend.h b/src/submission/submission-backend.h index df46739fd5..08e6b50d67 100644 --- a/src/submission/submission-backend.h +++ b/src/submission/submission-backend.h @@ -80,6 +80,7 @@ struct submission_backend_vfuncs { }; struct submission_backend { + pool_t pool; struct client *client; struct submission_backend *prev, *next; @@ -98,7 +99,7 @@ struct submission_backend { }; void submission_backend_init(struct submission_backend *backend, - struct client *client, + pool_t pool, struct client *client, const struct submission_backend_vfuncs *vfunc); void submission_backends_destroy_all(struct client *client);