Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1988:739b469b99e2 HEAD
syncing fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 10 May 2004 02:52:13 +0300 |
parents | 3b1f8ed213ca |
children | a2b009c65e02 |
files | src/lib-index/mail-index-view-sync.c src/lib-storage/index/maildir/maildir-sync.c src/lib-storage/index/maildir/maildir-uidlist.c src/lib-storage/index/maildir/maildir-uidlist.h |
diffstat | 4 files changed, 15 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-view-sync.c Mon May 10 02:32:43 2004 +0300 +++ b/src/lib-index/mail-index-view-sync.c Mon May 10 02:52:13 2004 +0300 @@ -353,6 +353,7 @@ mail_index_unmap(view->index, view->map); view->map = ctx->sync_map; + view->map_protected = FALSE; mail_transaction_log_view_unset(view->log_view);
--- a/src/lib-storage/index/maildir/maildir-sync.c Mon May 10 02:32:43 2004 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync.c Mon May 10 02:52:13 2004 +0300 @@ -559,7 +559,8 @@ is updated? shouldn't really happen.. */ mail_storage_set_critical(ibox->box.storage, "Maildir sync: UID < next_uid " - "(%u < %u)", uid, hdr->next_uid); + "(%u < %u, file = %s)", + uid, hdr->next_uid, filename); mail_index_mark_corrupted(ibox->index); ret = -1; break; @@ -678,9 +679,10 @@ } /* finish uidlist syncing, but keep it still locked */ - maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx); - if (maildir_sync_index(ctx) < 0) - return -1; + if (maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx)) { + if (maildir_sync_index(ctx) < 0) + return -1; + } ret = maildir_uidlist_sync_deinit(ctx->uidlist_sync_ctx); ctx->uidlist_sync_ctx = NULL;
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Mon May 10 02:32:43 2004 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Mon May 10 02:52:13 2004 +0300 @@ -215,7 +215,7 @@ rec = p_new(uidlist->record_pool, struct maildir_uidlist_rec, 1); rec->uid = uid; - rec->flags = flags; + rec->flags = flags | MAILDIR_UIDLIST_REC_FLAG_NONSYNCED; rec->filename = p_strdup(uidlist->record_pool, line); hash_insert(uidlist->files, rec->filename, rec); buffer_append(uidlist->record_buf, &rec, sizeof(rec)); @@ -767,7 +767,7 @@ } } -void maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx) +int maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx) { if (!ctx->partial) { if (!ctx->failed && !ctx->locked) @@ -777,9 +777,9 @@ maildir_uidlist_assign_uids(ctx->uidlist, ctx->first_new_pos); } - maildir_uidlist_mark_all(ctx->uidlist, FALSE); } ctx->finished = TRUE; + return !ctx->locked; } int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx) @@ -792,6 +792,9 @@ if (ctx->new_files_count != 0 && !ctx->failed && !ctx->locked) ret = maildir_uidlist_rewrite(ctx->uidlist); + if (ctx->partial) + maildir_uidlist_mark_all(ctx->uidlist, FALSE); + if (UIDLIST_IS_LOCKED(ctx->uidlist)) maildir_uidlist_unlock(ctx->uidlist);
--- a/src/lib-storage/index/maildir/maildir-uidlist.h Mon May 10 02:32:43 2004 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.h Mon May 10 02:52:13 2004 +0300 @@ -37,7 +37,8 @@ int maildir_uidlist_sync_next(struct maildir_uidlist_sync_ctx *ctx, const char *filename, enum maildir_uidlist_rec_flag flags); -void maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx); +/* Returns 1 = ok, 0 = uidlist is locked, don't try syncing any further */ +int maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx); int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx); /* List all maildir files. */