Mercurial > dovecot > core-2.2
changeset 11686:cfee7da47bf0 HEAD
dsync: Fixes to handling copying.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 01 Jul 2010 18:41:09 +0100 |
parents | c27e9a035b67 |
children | b37c85676f8e |
files | src/dsync/dsync-brain-msgs-new.c |
diffstat | 1 files changed, 17 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dsync/dsync-brain-msgs-new.c Thu Jul 01 18:29:21 2010 +0100 +++ b/src/dsync/dsync-brain-msgs-new.c Thu Jul 01 18:41:09 2010 +0100 @@ -147,11 +147,13 @@ copy_ctx->iter = dest_iter; copy_ctx->msg_idx = msg_idx; + dest_iter->copy_results_left++; + dest_iter->adding_msgs = TRUE; dsync_worker_msg_copy(dest_iter->worker, &inst_box->box.mailbox_guid, inst->uid, msg->msg, dsync_brain_copy_callback, copy_ctx); - dest_iter->copy_results_left++; + dest_iter->adding_msgs = FALSE; } else { src_iter = dest_iter == dest_iter->sync->dest_msg_iter ? dest_iter->sync->src_msg_iter : @@ -162,8 +164,8 @@ save_ctx->msg = msg->msg; save_ctx->mailbox_idx = dest_iter->mailbox_idx; + dest_iter->save_results_left++; dest_iter->adding_msgs = TRUE; - dest_iter->save_results_left++; dsync_worker_msg_get(src_iter->worker, src_mailbox, msg->orig_uid, msg_get_callback, save_ctx); dest_iter->adding_msgs = FALSE; @@ -178,27 +180,30 @@ const mailbox_guid_t *mailbox_guid) { struct dsync_brain_new_msg *msgs; - unsigned int i, msg_count; + unsigned int msg_count; bool ret = TRUE; msgs = array_get_modifiable(&iter->new_msgs, &msg_count); - for (i = iter->next_new_msg; i < msg_count; i++) { - if (msgs[i].saved) - continue; - if (msgs[i].mailbox_idx != iter->mailbox_idx) { - i_assert(msgs[i].mailbox_idx > iter->mailbox_idx); + while (iter->next_new_msg < msg_count) { + struct dsync_brain_new_msg *msg = &msgs[iter->next_new_msg]; + + if (msg->mailbox_idx != iter->mailbox_idx) { + i_assert(msg->mailbox_idx > iter->mailbox_idx); ret = FALSE; break; } + iter->next_new_msg++; + + if (msg->saved) + continue; if (dsync_brain_msg_sync_add_new_msg(iter, mailbox_guid, - i, &msgs[i]) <= 0) { + iter->next_new_msg - 1, + msg) <= 0) { /* failed / continue later */ - i++; break; } } - iter->next_new_msg = i; - if (i == msg_count) + if (iter->next_new_msg == msg_count) ret = FALSE; /* flush copy commands */