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)) {