dovecot-2.0: dsync: Fixed flushing asserts

dovecot at dovecot.org dovecot at dovecot.org
Sat Jul 10 20:11:58 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/d9d1272d99b7
changeset: 11775:d9d1272d99b7
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Jul 10 18:11:55 2010 +0100
description:
dsync: Fixed flushing asserts

diffstat:

 src/dsync/dsync-brain-msgs-new.c |  4 +++-
 src/dsync/dsync-brain-private.h  |  1 +
 src/dsync/dsync-brain.c          |  7 ++++++-
 src/dsync/dsync-worker-local.c   |  2 +-
 4 files changed, 11 insertions(+), 3 deletions(-)

diffs (80 lines):

diff -r 1f9080e9a530 -r d9d1272d99b7 src/dsync/dsync-brain-msgs-new.c
--- a/src/dsync/dsync-brain-msgs-new.c	Sat Jul 10 17:59:11 2010 +0100
+++ b/src/dsync/dsync-brain-msgs-new.c	Sat Jul 10 18:11:55 2010 +0100
@@ -52,6 +52,7 @@
 {
 	struct dsync_brain_msg_save_context *ctx = context;
 
+	i_warning("save done");
 	if (--ctx->iter->save_results_left == 0 && !ctx->iter->adding_msgs)
 		dsync_brain_msg_sync_add_new_msgs(ctx->iter);
 	i_free(ctx);
@@ -67,7 +68,7 @@
 
 	i_assert(ctx->iter->save_results_left > 0);
 
-	mailbox = array_idx(&ctx->iter->sync->mailboxes, ctx->mailbox_idx);
+	mailbox = array_idx(&->iter->sync->mailboxes, ctx->mailbox_idx);
 	switch (result) {
 	case DSYNC_MSG_GET_RESULT_SUCCESS:
 		/* the mailbox may have changed, make sure we've the
@@ -175,6 +176,7 @@
 		save_ctx->msg = msg->msg;
 		save_ctx->mailbox_idx = dest_iter->mailbox_idx;
 
+		i_warning("retr %d", save_ctx->msg->uid);
 		dest_iter->save_results_left++;
 		dest_iter->adding_msgs = TRUE;
 		dsync_worker_msg_get(src_iter->worker, src_mailbox,
diff -r 1f9080e9a530 -r d9d1272d99b7 src/dsync/dsync-brain-private.h
--- a/src/dsync/dsync-brain-private.h	Sat Jul 10 17:59:11 2010 +0100
+++ b/src/dsync/dsync-brain-private.h	Sat Jul 10 18:11:55 2010 +0100
@@ -122,6 +122,7 @@
 	struct dsync_brain_subs_list *dest_subs_list;
 
 	struct dsync_brain_mailbox_sync *mailbox_sync;
+	struct timeout *to;
 
 	unsigned int failed:1;
 	unsigned int verbose:1;
diff -r 1f9080e9a530 -r d9d1272d99b7 src/dsync/dsync-brain.c
--- a/src/dsync/dsync-brain.c	Sat Jul 10 17:59:11 2010 +0100
+++ b/src/dsync/dsync-brain.c	Sat Jul 10 18:11:55 2010 +0100
@@ -55,6 +55,8 @@
 
 	if (brain->state != DSYNC_STATE_SYNC_END)
 		ret = -1;
+	if (brain->to != NULL)
+		timeout_remove(&brain->to);
 
 	if (ret < 0) {
 		/* make sure we unreference save input streams before workers
@@ -783,11 +785,14 @@
 		dsync_brain_fail(brain);
 
 	brain->state++;
-	dsync_brain_sync(brain);
+	if (brain->to == NULL)
+		brain->to = timeout_add(0, dsync_brain_sync, brain);
 }
 
 void dsync_brain_sync(struct dsync_brain *brain)
 {
+	if (brain->to != NULL)
+		timeout_remove(&brain->to);
 	switch (brain->state) {
 	case DSYNC_STATE_GET_MAILBOXES:
 		i_assert(brain->src_mailbox_list == NULL);
diff -r 1f9080e9a530 -r d9d1272d99b7 src/dsync/dsync-worker-local.c
--- a/src/dsync/dsync-worker-local.c	Sat Jul 10 17:59:11 2010 +0100
+++ b/src/dsync/dsync-worker-local.c	Sat Jul 10 18:11:55 2010 +0100
@@ -1562,8 +1562,8 @@
 	worker->save_callback = NULL;
 	i_stream_unref(&worker->save_input);
 
+	dsync_worker_try_finish(worker);
 	callback(worker->save_context);
-	dsync_worker_try_finish(worker);
 }
 
 static void


More information about the dovecot-cvs mailing list