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