From d538e88c0c836337fd1d8a667de1db0621e42357 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 27 Oct 2018 11:56:59 +0200 Subject: [PATCH] submission: Allocate each backend on its own pool. This allows allocating per-backend module data. --- src/submission/submission-backend-relay.c | 7 ++++--- src/submission/submission-backend.c | 4 +++- src/submission/submission-backend.h | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) 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); -- 2.47.3