Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7271:4ac4e9ba1124 HEAD
Make sure we don't use a stale first_unwritten_pos to optimize
dovecot-uidlist writing.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 21 Feb 2008 13:06:50 +0200 |
parents | c6afa177bbf1 |
children | 1e5deb36a79f |
files | src/lib-storage/index/maildir/maildir-uidlist.c |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Wed Feb 20 20:39:07 2008 +0200 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Thu Feb 21 13:06:50 2008 +0200 @@ -103,6 +103,7 @@ unsigned int first_unwritten_pos, first_nouid_pos; unsigned int new_files_count; + unsigned int finish_change_counter; unsigned int partial:1; unsigned int finished:1; @@ -931,6 +932,7 @@ } iter = maildir_uidlist_iter_init(uidlist); + i_assert(first_idx <= array_count(&uidlist->records)); iter->next += first_idx; while (maildir_uidlist_iter_next_rec(iter, &rec)) { @@ -1080,6 +1082,7 @@ if (ctx->uidlist->recreate || uidlist->fd == -1 || uidlist->version != 3 || + ctx->finish_change_counter != ctx->uidlist->change_counter || (uidlist->read_records_count + ctx->new_files_count) * UIDLIST_COMPRESS_PERCENTAGE / 100 >= array_count(&uidlist->records)) return maildir_uidlist_recreate(uidlist); @@ -1381,6 +1384,7 @@ ctx->uidlist->last_seen_uid = ctx->uidlist->next_uid-1; ctx->uidlist->change_counter++; + ctx->finish_change_counter = ctx->uidlist->change_counter; } static void maildir_uidlist_swap(struct maildir_uidlist_sync_ctx *ctx) @@ -1409,9 +1413,9 @@ if (ctx->new_files_count != 0) { ctx->first_nouid_pos = count - ctx->new_files_count; maildir_uidlist_assign_uids(ctx); + } else { + ctx->uidlist->change_counter++; } - - ctx->uidlist->change_counter++; } void maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx)