Mercurial > dovecot > core-2.2
changeset 13188:6db2f76bc493
lib-index: MAIL_INDEX_SYNC_FLAG_DELETING_INDEX now allows committing changes to deleted index.
This fixes deleting mailboxes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 09 Aug 2011 16:32:27 +0300 |
parents | 1de8c2e4adb2 |
children | 916974b550a3 |
files | src/lib-index/mail-index-sync.c src/lib-index/mail-index-transaction-private.h src/lib-index/mail-index-transaction.c |
diffstat | 3 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-sync.c Tue Aug 09 15:29:26 2011 +0300 +++ b/src/lib-index/mail-index-sync.c Tue Aug 09 16:32:27 2011 +0300 @@ -390,7 +390,8 @@ 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 @@ 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;
--- a/src/lib-index/mail-index-transaction-private.h Tue Aug 09 15:29:26 2011 +0300 +++ b/src/lib-index/mail-index-transaction-private.h Tue Aug 09 16:32:27 2011 +0300 @@ -86,6 +86,7 @@ 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. */
--- a/src/lib-index/mail-index-transaction.c Tue Aug 09 15:29:26 2011 +0300 +++ b/src/lib-index/mail-index-transaction.c Tue Aug 09 16:32:27 2011 +0300 @@ -219,7 +219,7 @@ 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)) {