dovecot-2.2: virtual plugin: Handle physical mailbox deletion wh...

dovecot at dovecot.org dovecot at dovecot.org
Tue Aug 12 16:26:12 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/0ff4dde5490a
changeset: 17710:0ff4dde5490a
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Aug 12 19:24:10 2014 +0300
description:
virtual plugin: Handle physical mailbox deletion while virtual mailbox is open.

diffstat:

 src/plugins/virtual/virtual-sync.c |  24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diffs (41 lines):

diff -r 8948c0d91369 -r 0ff4dde5490a src/plugins/virtual/virtual-sync.c
--- a/src/plugins/virtual/virtual-sync.c	Tue Aug 12 19:12:04 2014 +0300
+++ b/src/plugins/virtual/virtual-sync.c	Tue Aug 12 19:24:10 2014 +0300
@@ -1061,6 +1061,21 @@
 	ctx->ext_header_changed = TRUE;
 }
 
+static void virtual_sync_backend_box_deleted(struct virtual_sync_context *ctx,
+					     struct virtual_backend_box *bbox)
+{
+	ARRAY_TYPE(seq_range) removed_uids;
+	const struct virtual_backend_uidmap *uidmap;
+
+	/* delay its full removal until the next time we open the virtual
+	   mailbox. for now just treat it as if it was empty. */
+
+	t_array_init(&removed_uids, 128);
+	array_foreach(&bbox->uids, uidmap)
+		seq_range_array_add(&removed_uids, uidmap->real_uid);
+	virtual_sync_mailbox_box_remove(ctx, bbox, &removed_uids);
+}
+
 static int virtual_sync_backend_box(struct virtual_sync_context *ctx,
 				    struct virtual_backend_box *bbox)
 {
@@ -1102,8 +1117,13 @@
 					 &status);
 		if (!bbox_index_opened && bbox->box->opened)
 			virtual_backend_box_opened(ctx->mbox, bbox);
-		if (ret < 0)
-			return -1;
+		if (ret < 0) {
+			if (mailbox_get_last_mail_error(bbox->box) != MAIL_ERROR_NOTFOUND)
+				return -1;
+			/* mailbox was deleted */
+			virtual_sync_backend_box_deleted(ctx, bbox);
+			return 0;
+		}
 		if (status.uidvalidity == bbox->sync_uid_validity &&
 		    status.uidnext == bbox->sync_next_uid &&
 		    status.highest_modseq == bbox->sync_highest_modseq) {


More information about the dovecot-cvs mailing list