Mercurial > dovecot > core-2.2
changeset 10673:6552652a9504 HEAD
lib-index: Index deletion is now a request that gets finalized by index sync.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 09 Feb 2010 02:04:00 +0200 |
parents | a9922c28f5cb |
children | 22354f505277 |
files | src/lib-index/mail-index-private.h src/lib-index/mail-index-sync-update.c src/lib-index/mail-index-sync.c src/lib-index/mail-index-transaction-update.c |
diffstat | 4 files changed, 14 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ 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;
--- 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 @@ 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,
--- 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 @@ 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;
--- 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_set_deleted(struct mail_index_transaction *t) { - i_assert((t->flags & MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL) != 0); - t->index_deleted = TRUE; }