]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Refactor index_mail_init() to make it more reusable
authorSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Wed, 31 Mar 2021 15:01:02 +0000 (16:01 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 15 Apr 2021 07:06:27 +0000 (07:06 +0000)
Adds arguments for two memory pools, to be set for mail.pool and
mail.data_pool. If data_pool is NULL, a pool is allocated but mail_pool
is required.

src/lib-storage/index/dbox-common/dbox-mail.c
src/lib-storage/index/imapc/imapc-mail.c
src/lib-storage/index/index-mail.c
src/lib-storage/index/index-mail.h
src/lib-storage/index/pop3c/pop3c-mail.c

index 25955d8a342ebb433fada25e115f9bd8d30299ac..49279f94363ff0d56615f2c81d02e13cc7cbb996 100644 (file)
@@ -22,9 +22,8 @@ dbox_mail_alloc(struct mailbox_transaction_context *t,
 
        pool = pool_alloconly_create("mail", 2048);
        mail = p_new(pool, struct dbox_mail, 1);
-       mail->imail.mail.pool = pool;
 
-       index_mail_init(&mail->imail, t, wanted_fields, wanted_headers);
+       index_mail_init(&mail->imail, t, wanted_fields, wanted_headers, pool, NULL);
        return &mail->imail.mail.mail;
 }
 
index af8bc17f7d8ed4eccecee0abbb500508cfa15d94..1ecf03e3a384ea940927b79522fbeb72a7cf78b6 100644 (file)
@@ -23,10 +23,9 @@ imapc_mail_alloc(struct mailbox_transaction_context *t,
 
        pool = pool_alloconly_create("mail", 2048);
        mail = p_new(pool, struct imapc_mail, 1);
-       mail->imail.mail.pool = pool;
        mail->fd = -1;
 
-       index_mail_init(&mail->imail, t, wanted_fields, wanted_headers);
+       index_mail_init(&mail->imail, t, wanted_fields, wanted_headers, pool, NULL);
        return &mail->imail.mail.mail;
 }
 
index f92482e9ae522a96b35c03087b6308c3fa0fd838..7e1a6f3dd125475c0ca032c10a72b5ef2ab4905a 100644 (file)
@@ -1688,9 +1688,8 @@ index_mail_alloc(struct mailbox_transaction_context *t,
 
        pool = pool_alloconly_create("mail", 2048);
        mail = p_new(pool, struct index_mail, 1);
-       mail->mail.pool = pool;
 
-       index_mail_init(mail, t, wanted_fields, wanted_headers);
+       index_mail_init(mail, t, wanted_fields, wanted_headers, pool, NULL);
        return &mail->mail.mail;
 }
 
@@ -1703,8 +1702,11 @@ static void index_mail_init_event(struct mail *mail)
 void index_mail_init(struct index_mail *mail,
                     struct mailbox_transaction_context *t,
                     enum mail_fetch_field wanted_fields,
-                    struct mailbox_header_lookup_ctx *wanted_headers)
+                    struct mailbox_header_lookup_ctx *wanted_headers,
+                    struct pool *mail_pool,
+                    struct pool *data_pool)
 {
+       mail->mail.pool = mail_pool;
        array_create(&mail->mail.module_contexts, mail->mail.pool,
                     sizeof(void *), 5);
 
@@ -1713,7 +1715,10 @@ void index_mail_init(struct index_mail *mail,
        mail->mail.mail.transaction = t;
        index_mail_init_event(&mail->mail.mail);
        t->mail_ref_count++;
-       mail->mail.data_pool = pool_alloconly_create("index_mail", 16384);
+       if (data_pool != NULL)
+               mail->mail.data_pool = data_pool;
+       else
+               mail->mail.data_pool = pool_alloconly_create("index_mail", 16384);
        mail->ibox = INDEX_STORAGE_CONTEXT(t->box);
        mail->mail.wanted_fields = wanted_fields;
        if (wanted_headers != NULL) {
index 3705cfd6564f6f1f7c4a5723774ea0e35b7e0f6c..88480ee35cd5edd7d90723bf45640899e8a996bf 100644 (file)
@@ -168,7 +168,9 @@ index_mail_alloc(struct mailbox_transaction_context *t,
 void index_mail_init(struct index_mail *mail,
                     struct mailbox_transaction_context *_t,
                     enum mail_fetch_field wanted_fields,
-                    struct mailbox_header_lookup_ctx *_wanted_headers);
+                    struct mailbox_header_lookup_ctx *_wanted_headers,
+                    struct pool *mail_pool,
+                    struct pool *data_pool);
 
 void index_mail_set_seq(struct mail *mail, uint32_t seq, bool saving);
 bool index_mail_set_uid(struct mail *mail, uint32_t uid);
index 860becb1e3f958749d61ce6a7fd7d8c2bb5b0dd2..c1cbe005a106da99bee82cde905cc5c657ad6d09 100644 (file)
@@ -18,9 +18,8 @@ pop3c_mail_alloc(struct mailbox_transaction_context *t,
 
        pool = pool_alloconly_create("mail", 2048);
        mail = p_new(pool, struct pop3c_mail, 1);
-       mail->imail.mail.pool = pool;
 
-       index_mail_init(&mail->imail, t, wanted_fields, wanted_headers);
+       index_mail_init(&mail->imail, t, wanted_fields, wanted_headers, pool, NULL);
        return &mail->imail.mail.mail;
 }