unsigned int index_lock_timeout:1;
unsigned int opened:1;
+ unsigned int index_delete_requested:1; /* next sync sets it deleted */
unsigned int index_deleted:1; /* no changes allowed anymore */
unsigned int log_locked:1;
unsigned int readonly:1;
break;
}
case MAIL_TRANSACTION_INDEX_DELETED:
- if ((hdr->type & MAIL_TRANSACTION_EXTERNAL) == 0)
- break;
- /* transaction log syncing should have already set this */
- i_assert(ctx->view->index->index_deleted);
+ if ((hdr->type & MAIL_TRANSACTION_EXTERNAL) == 0) {
+ /* next sync finishes the deletion */
+ ctx->view->index->index_delete_requested = TRUE;
+ } else {
+ /* transaction log syncing should have already
+ set this */
+ i_assert(ctx->view->index->index_deleted);
+ }
break;
default:
mail_index_sync_set_corrupted(ctx,
index->syncing = TRUE;
+ if (index->index_delete_requested) {
+ /* finish this sync by marking the index deleted */
+ mail_index_set_deleted(ctx->ext_trans);
+ }
+
*ctx_r = ctx;
*view_r = ctx->view;
*trans_r = ctx->ext_trans;