dovecot: Don't assert-crash if index was just reset.

dovecot at dovecot.org dovecot at dovecot.org
Fri Nov 2 18:25:32 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/7d7f31de0826
changeset: 6663:7d7f31de0826
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Nov 02 18:25:27 2007 +0200
description:
Don't assert-crash if index was just reset.

diffstat:

1 file changed, 9 insertions(+), 8 deletions(-)
src/lib-index/mail-index-view-sync.c |   17 +++++++++--------

diffs (75 lines):

diff -r c2c543538b5d -r 7d7f31de0826 src/lib-index/mail-index-view-sync.c
--- a/src/lib-index/mail-index-view-sync.c	Fri Nov 02 18:13:20 2007 +0200
+++ b/src/lib-index/mail-index-view-sync.c	Fri Nov 02 18:25:27 2007 +0200
@@ -91,12 +91,12 @@ mail_transaction_log_sort_expunges(ARRAY
 }
 
 static int
-view_sync_set_log_view_range(struct mail_index_view *view, bool sync_expunges)
+view_sync_set_log_view_range(struct mail_index_view *view, bool sync_expunges,
+			     bool *reset_r)
 {
 	const struct mail_index_header *hdr = &view->index->map->hdr;
 	uint32_t start_seq, end_seq;
 	uoff_t start_offset, end_offset;
-	bool reset;
 	int ret;
 
 	start_seq = view->log_file_expunge_seq;
@@ -109,7 +109,7 @@ view_sync_set_log_view_range(struct mail
 		ret = mail_transaction_log_view_set(view->log_view,
 						    start_seq, start_offset,
 						    end_seq, end_offset,
-						    &reset);
+						    reset_r);
 		if (ret <= 0) {
 			if (ret < 0)
 				return -1;
@@ -123,7 +123,7 @@ view_sync_set_log_view_range(struct mail
 			return -1;
 		}
 
-		if (!reset || sync_expunges)
+		if (!*reset_r || sync_expunges)
 			break;
 
 		/* we can't do this. sync only up to reset. */
@@ -151,9 +151,10 @@ view_sync_get_expunges(struct mail_index
 	const void *data;
 	unsigned int count, expunge_count = 0;
 	uint32_t prev_seq = 0;
+	bool reset;
 	int ret;
 
-	if (view_sync_set_log_view_range(view, TRUE) < 0)
+	if (view_sync_set_log_view_range(view, TRUE, &reset) < 0)
 		return -1;
 
 	/* get a list of expunge transactions. there may be some that we have
@@ -263,7 +264,7 @@ int mail_index_view_sync_begin(struct ma
 	struct mail_index_map *map;
 	ARRAY_TYPE(seq_range) expunges = ARRAY_INIT;
 	unsigned int expunge_count = 0;
-	bool sync_expunges;
+	bool reset, sync_expunges;
 
 	i_assert(!view->syncing);
 	i_assert(view->transactions == 0);
@@ -282,7 +283,7 @@ int mail_index_view_sync_begin(struct ma
 			return -1;
 	}
 
-	if (view_sync_set_log_view_range(view, sync_expunges) < 0) {
+	if (view_sync_set_log_view_range(view, sync_expunges, &reset) < 0) {
 		if (array_is_created(&expunges))
 			array_free(&expunges);
 		return -1;
@@ -301,7 +302,7 @@ int mail_index_view_sync_begin(struct ma
 		view->sync_new_map = view->index->map;
 		view->sync_new_map->refcount++;
 		i_assert(view->index->map->hdr.messages_count >=
-			 ctx->finish_min_msg_count);
+			 ctx->finish_min_msg_count || reset);
 
 		/* keep the old mapping without expunges until we're
 		   fully synced */


More information about the dovecot-cvs mailing list