From: Timo Sirainen Date: Tue, 9 Aug 2011 13:32:27 +0000 (+0300) Subject: lib-index: MAIL_INDEX_SYNC_FLAG_DELETING_INDEX now allows committing changes to delet... X-Git-Tag: 2.1.alpha1~155 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=491178793199e62320f7bc6292e7b8fd843ae5bc;p=thirdparty%2Fdovecot%2Fcore.git lib-index: MAIL_INDEX_SYNC_FLAG_DELETING_INDEX now allows committing changes to deleted index. This fixes deleting mailboxes. --- diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index 7e1049194f..03d17f4afb 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -390,7 +390,8 @@ mail_index_sync_begin_init(struct mail_index *index, return 0; } - if (index->index_deleted) { + if (index->index_deleted && + (flags & MAIL_INDEX_SYNC_FLAG_DELETING_INDEX) == 0) { /* index is already deleted. we can't sync. */ if (locked) mail_transaction_log_sync_unlock(index->log); @@ -490,6 +491,8 @@ int mail_index_sync_begin_to(struct mail_index *index, trans_flags |= MAIL_INDEX_TRANSACTION_FLAG_FSYNC; ctx->ext_trans = mail_index_transaction_begin(ctx->view, trans_flags); ctx->ext_trans->sync_transaction = TRUE; + ctx->ext_trans->commit_deleted_index = + (flags & MAIL_INDEX_SYNC_FLAG_DELETING_INDEX) != 0; *ctx_r = ctx; *view_r = ctx->view; diff --git a/src/lib-index/mail-index-transaction-private.h b/src/lib-index/mail-index-transaction-private.h index 1004dfcbcd..2d3889c6d9 100644 --- a/src/lib-index/mail-index-transaction-private.h +++ b/src/lib-index/mail-index-transaction-private.h @@ -86,6 +86,7 @@ struct mail_index_transaction { unsigned int reset:1; unsigned int index_deleted:1; unsigned int index_undeleted:1; + unsigned int commit_deleted_index:1; /* non-extension updates. flag updates don't change this because they may be added and removed, so be sure to check that the updates array is non-empty also. */ diff --git a/src/lib-index/mail-index-transaction.c b/src/lib-index/mail-index-transaction.c index 205b4097d6..195428b2ab 100644 --- a/src/lib-index/mail-index-transaction.c +++ b/src/lib-index/mail-index-transaction.c @@ -219,7 +219,7 @@ int mail_index_transaction_commit_full(struct mail_index_transaction **_t, mail_index_transaction_rollback(_t); return -1; } - if (!index_undeleted) { + if (!index_undeleted && !t->commit_deleted_index) { if (t->view->index->index_deleted || (t->view->index->index_delete_requested && !t->view->index->syncing)) {