dovecot-2.0: Don't assert-crash after noticing cache file corrup...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Oct 6 19:57:36 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/2d160210b306
changeset: 9974:2d160210b306
user: Timo Sirainen <tss at iki.fi>
date: Tue Oct 06 12:57:26 2009 -0400
description:
Don't assert-crash after noticing cache file corruption.
diffstat:
4 files changed, 12 insertions(+), 8 deletions(-)
src/lib-index/mail-cache-transaction.c | 1 -
src/lib-index/mail-index-transaction.c | 2 +-
src/lib-storage/index/index-mail.c | 6 +-----
src/lib-storage/index/index-transaction.c | 11 ++++++++++-
diffs (76 lines):
diff -r ba12a404d3b3 -r 2d160210b306 src/lib-index/mail-cache-transaction.c
--- 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 @@ mail_cache_transaction_free(struct mail_
*_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;
diff -r ba12a404d3b3 -r 2d160210b306 src/lib-index/mail-index-transaction.c
--- 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 @@ void mail_index_transaction_unref(struct
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);
diff -r ba12a404d3b3 -r 2d160210b306 src/lib-storage/index/index-mail.c
--- 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 @@ void index_mail_set_cache_corrupted(stru
}
/* 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,
diff -r ba12a404d3b3 -r 2d160210b306 src/lib-storage/index/index-transaction.c
--- 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 @@ int index_transaction_commit(struct mail
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 @@ int index_transaction_commit(struct mail
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 @@ void index_transaction_rollback(struct m
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,
More information about the dovecot-cvs
mailing list