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,