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