diff --git a/src/plugins/virtual/virtual-storage.h b/src/plugins/virtual/virtual-storage.h index a80fb4fc9a..697a64c438 100644 --- a/src/plugins/virtual/virtual-storage.h +++ b/src/plugins/virtual/virtual-storage.h @@ -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 *); diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index 997a00651f..1908667fe4 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -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);