changeset 19928:ba0605b83842

virtual plugin: If we detect backend box to be deleted, mark it permanently deleted.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 16 Mar 2016 10:04:32 +1100
parents fa49be8b4835
children e6a39782e898
files src/plugins/virtual/virtual-storage.h src/plugins/virtual/virtual-sync.c
diffstat 2 files changed, 6 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-storage.h	Wed Mar 16 09:30:20 2016 +1100
+++ b/src/plugins/virtual/virtual-storage.h	Wed Mar 16 10:04:32 2016 +1100
@@ -110,6 +110,7 @@
 	unsigned int negative_match:1;
 	unsigned int uids_nonsorted:1;
 	unsigned int search_args_initialized:1;
+	unsigned int deleted:1;
 };
 ARRAY_DEFINE_TYPE(virtual_backend_box, struct virtual_backend_box *);
 
--- a/src/plugins/virtual/virtual-sync.c	Wed Mar 16 09:30:20 2016 +1100
+++ b/src/plugins/virtual/virtual-sync.c	Wed Mar 16 10:04:32 2016 +1100
@@ -1092,6 +1092,8 @@
 	array_foreach(&bbox->uids, uidmap)
 		seq_range_array_add(&removed_uids, uidmap->real_uid);
 	virtual_sync_mailbox_box_remove(ctx, bbox, &removed_uids);
+
+	bbox->deleted = TRUE;
 }
 
 static int virtual_sync_backend_box(struct virtual_sync_context *ctx,
@@ -1102,6 +1104,9 @@
 	bool bbox_index_opened = bbox->box->opened;
 	int ret;
 
+	if (bbox->deleted)
+		return 0;
+
 	/* if we already did some changes to index, commit them before
 	   syncing starts. */
 	virtual_backend_box_sync_mail_unset(bbox);