changeset 19994:c497744ad9ba

virtual plugin: struct mail_vfuncs.close() wasn't implemented. 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.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 07 Apr 2016 17:50:28 +0300
parents 9e844498398e
children 8891fcb7ea87
files src/plugins/virtual/virtual-mail.c
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-mail.c	Thu Apr 07 16:35:28 2016 +0300
+++ b/src/plugins/virtual/virtual-mail.c	Thu Apr 07 17:50:28 2016 +0300
@@ -55,6 +55,21 @@
 	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 @@
 }
 
 struct mail_vfuncs virtual_mail_vfuncs = {
-	NULL,
+	virtual_mail_close,
 	virtual_mail_free,
 	virtual_mail_set_seq,
 	virtual_mail_set_uid,