dovecot-2.0: dsync: Fixes to handling copying.

dovecot at dovecot.org dovecot at dovecot.org
Thu Jul 1 20:41:12 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/cfee7da47bf0
changeset: 11686:cfee7da47bf0
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Jul 01 18:41:09 2010 +0100
description:
dsync: Fixes to handling copying.

diffstat:

 src/dsync/dsync-brain-msgs-new.c |  29 +++++++++++++++++------------
 1 files changed, 17 insertions(+), 12 deletions(-)

diffs (69 lines):

diff -r c27e9a035b67 -r cfee7da47bf0 src/dsync/dsync-brain-msgs-new.c
--- 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 */


More information about the dovecot-cvs mailing list