# HG changeset patch # User Timo Sirainen # Date 1148978171 -10800 # Node ID 22b54c007b915c4e61f6cb70179fdef6c5c496f7 # Parent 7e1acaa7e76ba73ebc5c46a34a3a172a89c1ace3 We were updating index->map also when syncing views. diff -r 7e1acaa7e76b -r 22b54c007b91 src/lib-index/mail-cache-sync-update.c --- 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 */ diff -r 7e1acaa7e76b -r 22b54c007b91 src/lib-index/mail-cache.c --- 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)); diff -r 7e1acaa7e76b -r 22b54c007b91 src/lib-index/mail-index-private.h --- 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 { diff -r 7e1acaa7e76b -r 22b54c007b91 src/lib-index/mail-index-sync-update.c --- 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. */ diff -r 7e1acaa7e76b -r 22b54c007b91 src/lib-index/mail-index-sync.c --- 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 { diff -r 7e1acaa7e76b -r 22b54c007b91 src/lib-index/mail-index.c --- 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,