changeset 8273:40df4d4cced0 HEAD

Cache file was never updated if the file existed but index didn't have cache extension.
author Timo Sirainen <tss@iki.fi>
date Tue, 14 Oct 2008 14:52:44 +0300
parents 434a8a0edc0a
children 242e6d47f790
files src/lib-index/mail-cache-transaction.c
diffstat 1 files changed, 16 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-transaction.c	Tue Oct 14 00:58:13 2008 +0300
+++ b/src/lib-index/mail-cache-transaction.c	Tue Oct 14 14:52:44 2008 +0300
@@ -159,19 +159,23 @@
 			return;
 
 		if (!mail_index_map_get_ext_idx(cache->index->map,
-						cache->ext_id, &idx))
-			return;
-
-		ext = array_idx(&cache->index->map->extensions, idx);
-		if (ext->reset_id == cache->hdr->file_seq || i == 2)
-			break;
+						cache->ext_id, &idx)) {
+			/* index doesn't have a cache extension, but the cache
+			   file exists (corrupted indexes fixed?). fix it. */
+			if (i == 2)
+				break;
+		} else {
+			ext = array_idx(&cache->index->map->extensions, idx);
+			if (ext->reset_id == cache->hdr->file_seq || i == 2)
+				break;
 
-		/* index offsets don't match the cache file */
-		if (ext->reset_id > cache->hdr->file_seq) {
-			/* the cache file appears to be too old.
-			   reopening should help. */
-			if (mail_cache_reopen(cache) != 0)
-				break;
+			/* index offsets don't match the cache file */
+			if (ext->reset_id > cache->hdr->file_seq) {
+				/* the cache file appears to be too old.
+				   reopening should help. */
+				if (mail_cache_reopen(cache) != 0)
+					break;
+			}
 		}
 
 		/* cache file sequence might be broken. it's also possible