dovecot-2.0: lib-index: Index deletion is now a request that get...

dovecot at dovecot.org dovecot at dovecot.org
Tue Feb 9 04:12:02 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/6552652a9504
changeset: 10673:6552652a9504
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Feb 09 02:04:00 2010 +0200
description:
lib-index: Index deletion is now a request that gets finalized by index sync.

diffstat:

4 files changed, 14 insertions(+), 6 deletions(-)
src/lib-index/mail-index-private.h            |    1 +
src/lib-index/mail-index-sync-update.c        |   12 ++++++++----
src/lib-index/mail-index-sync.c               |    5 +++++
src/lib-index/mail-index-transaction-update.c |    2 --

diffs (60 lines):

diff -r a9922c28f5cb -r 6552652a9504 src/lib-index/mail-index-private.h
--- a/src/lib-index/mail-index-private.h	Mon Feb 08 23:43:45 2010 +0200
+++ b/src/lib-index/mail-index-private.h	Tue Feb 09 02:04:00 2010 +0200
@@ -226,6 +226,7 @@ struct mail_index {
 	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;
diff -r a9922c28f5cb -r 6552652a9504 src/lib-index/mail-index-sync-update.c
--- a/src/lib-index/mail-index-sync-update.c	Mon Feb 08 23:43:45 2010 +0200
+++ b/src/lib-index/mail-index-sync-update.c	Tue Feb 09 02:04:00 2010 +0200
@@ -815,10 +815,14 @@ int mail_index_sync_record(struct mail_i
 		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,
diff -r a9922c28f5cb -r 6552652a9504 src/lib-index/mail-index-sync.c
--- a/src/lib-index/mail-index-sync.c	Mon Feb 08 23:43:45 2010 +0200
+++ b/src/lib-index/mail-index-sync.c	Tue Feb 09 02:04:00 2010 +0200
@@ -482,6 +482,11 @@ int mail_index_sync_begin_to(struct mail
 
 	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;
diff -r a9922c28f5cb -r 6552652a9504 src/lib-index/mail-index-transaction-update.c
--- a/src/lib-index/mail-index-transaction-update.c	Mon Feb 08 23:43:45 2010 +0200
+++ b/src/lib-index/mail-index-transaction-update.c	Tue Feb 09 02:04:00 2010 +0200
@@ -1172,8 +1172,6 @@ void mail_index_reset(struct mail_index_
 
 void mail_index_set_deleted(struct mail_index_transaction *t)
 {
-	i_assert((t->flags & MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL) != 0);
-
 	t->index_deleted = TRUE;
 }
 


More information about the dovecot-cvs mailing list