changeset 4283:22b54c007b91 HEAD

We were updating index->map also when syncing views.
author Timo Sirainen <tss@iki.fi>
date Tue, 30 May 2006 11:36:11 +0300
parents 7e1acaa7e76b
children ae0d876d98f5
files src/lib-index/mail-cache-sync-update.c src/lib-index/mail-cache.c src/lib-index/mail-index-private.h src/lib-index/mail-index-sync-update.c src/lib-index/mail-index-sync.c src/lib-index/mail-index.c
diffstat 6 files changed, 22 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-sync-update.c	Tue May 30 11:34:23 2006 +0300
+++ b/src/lib-index/mail-cache-sync-update.c	Tue May 30 11:36:11 2006 +0300
@@ -124,7 +124,7 @@
 	}
 
 	if (*old_cache_offset == 0 ||
-	    sync_ctx->type != MAIL_INDEX_SYNC_HANDLER_INDEX)
+	    sync_ctx->type != MAIL_INDEX_SYNC_HANDLER_FILE)
 		return 1;
 
 	/* we'll need to link the old and new cache records */
--- a/src/lib-index/mail-cache.c	Tue May 30 11:34:23 2006 +0300
+++ b/src/lib-index/mail-cache.c	Tue May 30 11:36:11 2006 +0300
@@ -304,7 +304,8 @@
 					    mail_cache_expunge_handler);
 	mail_index_register_sync_handler(index, cache->ext_id,
 					 mail_cache_sync_handler,
-                                         MAIL_INDEX_SYNC_HANDLER_INDEX |
+                                         MAIL_INDEX_SYNC_HANDLER_FILE |
+                                         MAIL_INDEX_SYNC_HANDLER_HEAD |
 					 (cache->file_cache == NULL ? 0 :
 					  MAIL_INDEX_SYNC_HANDLER_VIEW));
 
--- a/src/lib-index/mail-index-private.h	Tue May 30 11:34:23 2006 +0300
+++ b/src/lib-index/mail-index-private.h	Tue May 30 11:36:11 2006 +0300
@@ -76,8 +76,9 @@
 };
 
 enum mail_index_sync_handler_type {
-	MAIL_INDEX_SYNC_HANDLER_INDEX	= 0x01,
-	MAIL_INDEX_SYNC_HANDLER_VIEW	= 0x02
+	MAIL_INDEX_SYNC_HANDLER_FILE	= 0x01,
+	MAIL_INDEX_SYNC_HANDLER_HEAD	= 0x02,
+	MAIL_INDEX_SYNC_HANDLER_VIEW	= 0x04
 };
 
 struct mail_index_sync_handler {
--- a/src/lib-index/mail-index-sync-update.c	Tue May 30 11:34:23 2006 +0300
+++ b/src/lib-index/mail-index-sync-update.c	Tue May 30 11:36:11 2006 +0300
@@ -23,13 +23,17 @@
 	mail_index_unmap(view->index, &view->map);
 	view->map = map;
 	view->map->refcount++;
-	mail_index_unmap(view->index, &view->index->map);
-	view->index->map = map;
-	view->index->hdr = &map->hdr;
 
-	if (ctx->type == MAIL_INDEX_SYNC_HANDLER_INDEX) {
-		map->write_to_disk = TRUE;
-		map->write_atomic = TRUE;
+	if ((ctx->type & (MAIL_INDEX_SYNC_HANDLER_FILE |
+			  MAIL_INDEX_SYNC_HANDLER_HEAD)) != 0) {
+		mail_index_unmap(view->index, &view->index->map);
+		view->index->map = map;
+		view->index->hdr = &map->hdr;
+
+		if (ctx->type == MAIL_INDEX_SYNC_HANDLER_FILE) {
+			map->write_to_disk = TRUE;
+			map->write_atomic = TRUE;
+		}
 	}
 
 	i_assert(view->hdr.messages_count == map->hdr.messages_count);
@@ -158,12 +162,12 @@
 	if (seq1 == 0)
 		return 1;
 
-	/* don't call expunge handlers if we're syncing view */
-	if (ctx->type != MAIL_INDEX_SYNC_HANDLER_VIEW &&
+	/* call expunge handlers only when syncing index file */
+	if (ctx->type == MAIL_INDEX_SYNC_HANDLER_FILE &&
 	    !ctx->expunge_handlers_set)
 		mail_index_sync_init_expunge_handlers(ctx);
 
-	if (ctx->type != MAIL_INDEX_SYNC_HANDLER_VIEW &&
+	if (ctx->type == MAIL_INDEX_SYNC_HANDLER_FILE &&
 	    array_is_created(&ctx->expunge_handlers)) {
 		expunge_handlers = array_get(&ctx->expunge_handlers,
 					     &expunge_handlers_count);
@@ -655,7 +659,7 @@
 	bool had_dirty, skipped, check_ext_offsets;
 
 	mail_index_sync_map_init(&sync_map_ctx, view,
-				 MAIL_INDEX_SYNC_HANDLER_INDEX);
+				 MAIL_INDEX_SYNC_HANDLER_FILE);
 
 	/* we'll have to update view->lock_id to avoid mail_index_view_lock()
 	   trying to update the file later. */
--- a/src/lib-index/mail-index-sync.c	Tue May 30 11:34:23 2006 +0300
+++ b/src/lib-index/mail-index-sync.c	Tue May 30 11:36:11 2006 +0300
@@ -745,7 +745,7 @@
 	va_start(va, fmt);
 	t_push();
 	error = t_strdup_vprintf(fmt, va);
-	if (ctx->type == MAIL_INDEX_SYNC_HANDLER_INDEX) {
+	if (ctx->type == MAIL_INDEX_SYNC_HANDLER_FILE) {
 		mail_transaction_log_view_set_corrupted(ctx->view->log_view,
 							"%s", error);
 	} else {
--- a/src/lib-index/mail-index.c	Tue May 30 11:34:23 2006 +0300
+++ b/src/lib-index/mail-index.c	Tue May 30 11:36:11 2006 +0300
@@ -863,7 +863,7 @@
 
 	view = mail_index_view_open(index);
 	mail_index_sync_map_init(&sync_map_ctx, view,
-				 MAIL_INDEX_SYNC_HANDLER_VIEW);
+				 MAIL_INDEX_SYNC_HANDLER_HEAD);
 
 	check_ext_offsets = TRUE; broken = FALSE;
 	while ((ret = mail_transaction_log_view_next(log_view, &thdr, &tdata,