Mercurial > dovecot > original-hg > dovecot-1.2
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);