]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual plugin: struct mail_vfuncs.close() wasn't implemented.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 7 Apr 2016 14:50:28 +0000 (17:50 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 8 Apr 2016 11:03:12 +0000 (14:03 +0300)
This wasn't a problem normally, because the core code wouldn't try to call
this. It became a problem only after other plugins were trying to call it.

src/plugins/virtual/virtual-mail.c

index b135e8442a19ca7a5f4a07151ac2cd03c7ee1916..84fe7dd7860fb19772258d7f35297739c50f478c 100644 (file)
@@ -55,6 +55,21 @@ virtual_mail_alloc(struct mailbox_transaction_context *t,
        return &vmail->imail.mail.mail;
 }
 
+static void virtual_mail_close(struct mail *mail)
+{
+       struct virtual_mail *vmail = (struct virtual_mail *)mail;
+       struct mail **mails;
+       unsigned int i, count;
+
+       mails = array_get_modifiable(&vmail->backend_mails, &count);
+       for (i = 0; i < count; i++) {
+               struct mail_private *p = (struct mail_private *)mails[i];
+
+               p->v.close(mails[i]);
+       }
+       index_mail_close(mail);
+}
+
 static void virtual_mail_free(struct mail *mail)
 {
        struct virtual_mail *vmail = (struct virtual_mail *)mail;
@@ -487,7 +502,7 @@ virtual_mail_set_cache_corrupted(struct mail *mail, enum mail_fetch_field field)
 }
 
 struct mail_vfuncs virtual_mail_vfuncs = {
-       NULL,
+       virtual_mail_close,
        virtual_mail_free,
        virtual_mail_set_seq,
        virtual_mail_set_uid,