]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: Allocate each backend on its own pool.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 27 Oct 2018 09:56:59 +0000 (11:56 +0200)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Mon, 29 Oct 2018 16:41:29 +0000 (17:41 +0100)
This allows allocating per-backend module data.

src/submission/submission-backend-relay.c
src/submission/submission-backend.c
src/submission/submission-backend.h

index 00cf208f1331d2ada69151268124e1567d602ce3..b1eb42f988f5358ae1c92f94a1729bd7f1b6bb05 100644 (file)
@@ -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,
index a983b5e3915dbbeab4249e600995c99637323db6..6b8ca05ae23c1cd095cb21b1d98faa51b67999c3 100644 (file)
 #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)
index df46739fd515b94731b773da1b17b976e0381bc9..08e6b50d6748dd6d2be34b3f0bde0396cc36149a 100644 (file)
@@ -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);