changeset 7252:c96bf18c886b HEAD

When setting cache corrupted, make sure we don't write broken values to the new cache file. Also log broken virtual size fetches better and support 0 as a generic "some fields" value.
author Timo Sirainen <tss@iki.fi>
date Sat, 16 Feb 2008 15:43:51 +0200
parents c3d829cdbfa5
children 6f9786d83007
files src/lib-storage/index/index-mail.c
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-mail.c	Sat Feb 16 15:16:34 2008 +0200
+++ b/src/lib-storage/index/index-mail.c	Sat Feb 16 15:43:51 2008 +0200
@@ -1336,6 +1336,15 @@
 	const char *field_name;
 
 	switch (field) {
+	case 0:
+		field_name = "fields";
+		break;
+	case MAIL_FETCH_VIRTUAL_SIZE:
+		field_name = "virtual size";
+		imail->data.physical_size = (uoff_t)-1;
+		imail->data.virtual_size = (uoff_t)-1;
+		imail->data.parts = NULL;
+		break;
 	case MAIL_FETCH_MESSAGE_PARTS:
 		field_name = "MIME parts";
 		imail->data.parts = NULL;
@@ -1354,8 +1363,14 @@
 		field_name = t_strdup_printf("#%x", field);
 	}
 
+	/* 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);
+
+	imail->data.no_caching = TRUE;
 	mail_cache_set_corrupted(imail->ibox->cache,
 				 "Broken %s for mail UID %u",
 				 field_name, mail->uid);
-
 }