]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual plugin: If we detect backend box to be deleted, mark it permanently deleted.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 15 Mar 2016 23:04:32 +0000 (10:04 +1100)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 16 Mar 2016 00:02:48 +0000 (11:02 +1100)
src/plugins/virtual/virtual-storage.h
src/plugins/virtual/virtual-sync.c

index a80fb4fc9a8a1a26290a0c648c668f0728bb68a0..697a64c438eefcd06e4d78cc12abc9fef374ab40 100644 (file)
@@ -110,6 +110,7 @@ struct virtual_backend_box {
        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 *);
 
index 997a00651f3286f200039545eb9847e0a14f7deb..1908667fe40c5a97713bb7c2e8fdf9e37ef47649 100644 (file)
@@ -1092,6 +1092,8 @@ static void virtual_sync_backend_box_deleted(struct virtual_sync_context *ctx,
        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 @@ static int virtual_sync_backend_box(struct virtual_sync_context *ctx,
        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);