changeset 5785:bcf58c66a099 HEAD

DEBUG: Verify header counters/lowwaters more often.
author Timo Sirainen <tss@iki.fi>
date Wed, 20 Jun 2007 01:54:42 +0300
parents 9493c7f1ebca
children b6cf05796f6d
files src/lib-index/mail-index-sync-private.h src/lib-index/mail-index-sync-update.c src/lib-index/mail-index-view-sync.c
diffstat 3 files changed, 45 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-sync-private.h	Wed Jun 20 01:34:18 2007 +0300
+++ b/src/lib-index/mail-index-sync-private.h	Wed Jun 20 01:54:42 2007 +0300
@@ -87,4 +87,8 @@
 void mail_index_sync_set_corrupted(struct mail_index_sync_map_ctx *ctx,
 				   const char *fmt, ...) __attr_format__(2, 3);
 
+#ifdef DEBUG
+void mail_index_map_check(struct mail_index_map *map);
 #endif
+
+#endif
--- a/src/lib-index/mail-index-sync-update.c	Wed Jun 20 01:34:18 2007 +0300
+++ b/src/lib-index/mail-index-sync-update.c	Wed Jun 20 01:54:42 2007 +0300
@@ -655,6 +655,37 @@
 	}
 }
 
+#ifdef DEBUG
+void mail_index_map_check(struct mail_index_map *map)
+{
+	const struct mail_index_header *hdr = &map->hdr;
+	unsigned int i, del = 0, recent = 0, seen = 0;
+
+	i_assert(hdr->messages_count == map->records_count);
+	for (i = 0; i < map->records_count; i++) {
+		const struct mail_index_record *rec;
+
+		rec = MAIL_INDEX_MAP_IDX(map, i);
+
+		if (rec->flags & MAIL_DELETED) {
+			i_assert(rec->uid >= hdr->first_deleted_uid_lowwater);
+			del++;
+		}
+		if (rec->flags & MAIL_RECENT) {
+			i_assert(rec->uid >= hdr->first_recent_uid_lowwater);
+			recent++;
+		}
+		if (rec->flags & MAIL_SEEN)
+			seen++;
+		else
+			i_assert(rec->uid >= hdr->first_unseen_uid_lowwater);
+	}
+	i_assert(del == hdr->deleted_messages_count);
+	i_assert(recent == hdr->recent_messages_count);
+	i_assert(seen == hdr->seen_messages_count);
+}
+#endif
+
 int mail_index_sync_map(struct mail_index *index, struct mail_index_map **_map,
 			enum mail_index_sync_handler_type type, bool force)
 {
@@ -765,6 +796,10 @@
 
 	mail_index_sync_update_log_offset(&sync_map_ctx, view->map, TRUE);
 
+#ifdef DEBUG
+	mail_index_map_check(map);
+#endif
+
 	/* transaction log tracks internally the current tail offset.
 	   besides using header updates, it also updates the offset to skip
 	   over following external transactions to avoid extra unneeded log
--- a/src/lib-index/mail-index-view-sync.c	Wed Jun 20 01:34:18 2007 +0300
+++ b/src/lib-index/mail-index-view-sync.c	Wed Jun 20 01:54:42 2007 +0300
@@ -173,37 +173,15 @@
 #ifdef DEBUG
 static void mail_index_view_check(struct mail_index_view *view)
 {
-	unsigned int i, del = 0, recent = 0, seen = 0;
+	mail_index_map_check(view->map);
 
-	i_assert(view->hdr.messages_count == view->map->records_count);
+	i_assert(view->hdr.messages_count == view->map->hdr.messages_count);
 	i_assert(view->hdr.deleted_messages_count ==
 		 view->map->hdr.deleted_messages_count);
 	i_assert(view->hdr.recent_messages_count ==
 		 view->map->hdr.recent_messages_count);
 	i_assert(view->hdr.seen_messages_count ==
 		 view->map->hdr.seen_messages_count);
-
-	for (i = 0; i < view->map->records_count; i++) {
-		const struct mail_index_record *rec;
-
-		rec = MAIL_INDEX_MAP_IDX(view->map, i);
-
-		if (rec->flags & MAIL_DELETED) {
-			i_assert(rec->uid >= view->hdr.first_deleted_uid_lowwater);
-			del++;
-		}
-		if (rec->flags & MAIL_RECENT) {
-			i_assert(rec->uid >= view->hdr.first_recent_uid_lowwater);
-			recent++;
-		}
-		if (rec->flags & MAIL_SEEN)
-			seen++;
-		else
-			i_assert(rec->uid >= view->hdr.first_unseen_uid_lowwater);
-	}
-	i_assert(del == view->hdr.deleted_messages_count);
-	i_assert(recent == view->hdr.recent_messages_count);
-	i_assert(seen == view->hdr.seen_messages_count);
 }
 #endif
 
@@ -277,12 +255,6 @@
 			view->map->hdr = *hdr;
 		}
 
-#ifdef DEBUG
-		i_assert(view->map->hdr.messages_count ==
-			 view->hdr.messages_count);
-		mail_index_view_check(view);
-#endif
-
 		if (view->map->refcount > 1) {
 			map = mail_index_map_clone(view->map);
 			mail_index_unmap(view->index, &view->map);
@@ -294,6 +266,10 @@
 		i_assert(map->records_count == map->hdr.messages_count);
 	}
 
+#ifdef DEBUG
+	mail_index_view_check(view);
+#endif
+
 	/* Syncing the view invalidates all previous looked up records.
 	   Unreference the mappings this view keeps because of them. */
 	mail_index_view_unref_maps(view);