Mercurial > dovecot > core-2.2
changeset 11775:d9d1272d99b7 HEAD
dsync: Fixed flushing asserts
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 10 Jul 2010 18:11:55 +0100 |
parents | 1f9080e9a530 |
children | def45252ab48 bac0353c53c4 |
files | src/dsync/dsync-brain-msgs-new.c src/dsync/dsync-brain-private.h src/dsync/dsync-brain.c src/dsync/dsync-worker-local.c |
diffstat | 4 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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,
--- 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;
--- 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);
--- 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