Mercurial > dovecot > core-2.2
changeset 9974:2d160210b306 HEAD
Don't assert-crash after noticing cache file corruption.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 06 Oct 2009 12:57:26 -0400 |
parents | ba12a404d3b3 |
children | 173435e81938 |
files | src/lib-index/mail-cache-transaction.c src/lib-index/mail-index-transaction.c src/lib-storage/index/index-mail.c src/lib-storage/index/index-transaction.c |
diffstat | 4 files changed, 12 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-cache-transaction.c Tue Oct 06 10:53:34 2009 -0400 +++ b/src/lib-index/mail-cache-transaction.c Tue Oct 06 12:57:26 2009 -0400 @@ -151,7 +151,6 @@ *_ctx = NULL; MODULE_CONTEXT_UNSET(ctx->trans, cache_mail_index_transaction_module); - ctx->trans->v = ctx->super; ctx->view->transaction = NULL; ctx->view->trans_seq1 = ctx->view->trans_seq2 = 0;
--- a/src/lib-index/mail-index-transaction.c Tue Oct 06 10:53:34 2009 -0400 +++ b/src/lib-index/mail-index-transaction.c Tue Oct 06 12:57:26 2009 -0400 @@ -48,7 +48,7 @@ if (--t->refcount > 0) return; - mail_index_transaction_reset(t); + mail_index_transaction_reset_v(t); array_free(&t->module_contexts); mail_index_view_transaction_unref(t->view);
--- a/src/lib-storage/index/index-mail.c Tue Oct 06 10:53:34 2009 -0400 +++ b/src/lib-storage/index/index-mail.c Tue Oct 06 12:57:26 2009 -0400 @@ -1525,11 +1525,7 @@ } /* make sure we don't cache invalid values */ - mail_cache_transaction_rollback(&imail->trans->cache_trans); - imail->trans->cache_trans = - mail_cache_get_transaction(imail->trans->cache_view, - imail->trans->trans); - + mail_cache_transaction_reset(imail->trans->cache_trans); imail->data.no_caching = TRUE; imail->data.forced_no_caching = TRUE; mail_cache_set_corrupted(imail->ibox->cache,
--- a/src/lib-storage/index/index-transaction.c Tue Oct 06 10:53:34 2009 -0400 +++ b/src/lib-storage/index/index-transaction.c Tue Oct 06 12:57:26 2009 -0400 @@ -114,6 +114,8 @@ struct index_transaction_context *t = (struct index_transaction_context *)_t; struct mail_index_transaction *itrans = t->trans; + struct index_mailbox *ibox = (struct index_mailbox *)_t->box; + int ret; memset(changes_r, 0, sizeof(*changes_r)); changes_r->pool = pool_alloconly_create("transaction changes", 1024); @@ -121,7 +123,10 @@ p_array_init(&changes_r->updated_uids, changes_r->pool, 32); _t->changes = changes_r; - return mail_index_transaction_commit(&itrans); + ret = mail_index_transaction_commit(&itrans); + i_assert(ibox->box.transaction_count > 0 || + ibox->view->transactions == 0); + return ret; } void index_transaction_rollback(struct mailbox_transaction_context *_t) @@ -129,8 +134,12 @@ struct index_transaction_context *t = (struct index_transaction_context *)_t; struct mail_index_transaction *itrans = t->trans; + struct index_mailbox *ibox = (struct index_mailbox *)_t->box; mail_index_transaction_rollback(&itrans); + + i_assert(ibox->box.transaction_count > 0 || + ibox->view->transactions == 0); } void index_transaction_set_max_modseq(struct mailbox_transaction_context *_t,