]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins/virtual: Use index_mail_init() to initialize the mail
authorSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Wed, 31 Mar 2021 15:08:06 +0000 (16:08 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 15 Apr 2021 07:06:27 +0000 (07:06 +0000)
Cleans up duplicated code. Also, index_mail_init initializes mail.event
as well. Something that was missing previously.

src/plugins/virtual/virtual-mail.c

index eb007b410f370298a009e7f3ac7c2751b9b362fe..9a2eda994b8b3ff3e580b9bb4be3375c6845537b 100644 (file)
@@ -35,27 +35,14 @@ virtual_mail_alloc(struct mailbox_transaction_context *t,
 {
        struct virtual_mailbox *mbox = (struct virtual_mailbox *)t->box;
        struct virtual_mail *vmail;
-       pool_t pool;
+       pool_t mail_pool, data_pool;
 
-       pool = pool_alloconly_create("vmail", 1024);
-       vmail = p_new(pool, struct virtual_mail, 1);
-       vmail->imail.mail.pool = pool;
-       vmail->imail.mail.data_pool =
-               pool_alloconly_create("virtual index_mail", 512);
+       mail_pool = pool_alloconly_create("vmail", 1024);
+       data_pool = pool_alloconly_create("virtual index_mail", 512);
+       vmail = p_new(mail_pool, struct virtual_mail, 1);
+       index_mail_init(&vmail->imail, t, wanted_fields, wanted_headers,
+                       mail_pool, data_pool);
        vmail->imail.mail.v = virtual_mail_vfuncs;
-       vmail->imail.mail.mail.box = t->box;
-       vmail->imail.mail.mail.transaction = t;
-       array_create(&vmail->imail.mail.module_contexts, pool,
-                    sizeof(void *), 5);
-
-       vmail->imail.ibox = INDEX_STORAGE_CONTEXT(t->box);
-
-       vmail->wanted_fields = wanted_fields;
-       if (wanted_headers != NULL) {
-               vmail->wanted_headers = wanted_headers;
-               mailbox_header_lookup_ref(wanted_headers);
-       }
-
        i_array_init(&vmail->backend_mails, array_count(&mbox->backend_boxes));
        return &vmail->imail.mail.mail;
 }
@@ -90,6 +77,7 @@ static void virtual_mail_free(struct mail *mail)
        for (i = 0; i < count; i++)
                mail_free(&mails[i]);
        array_free(&vmail->backend_mails);
+       mail->transaction->mail_ref_count--;
 
        mailbox_header_lookup_unref(&vmail->wanted_headers);
        event_unref(&mail->event);