]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Fixed flushing asserts
authorTimo Sirainen <tss@iki.fi>
Sat, 10 Jul 2010 17:11:55 +0000 (18:11 +0100)
committerTimo Sirainen <tss@iki.fi>
Sat, 10 Jul 2010 17:11:55 +0000 (18:11 +0100)
--HG--
branch : HEAD

src/dsync/dsync-brain-msgs-new.c
src/dsync/dsync-brain-private.h
src/dsync/dsync-brain.c
src/dsync/dsync-worker-local.c

index 3ac0d1477a358533cb91cd75d2cd1ff2a3665b4e..22a7332db1505c49cf3cb3adf74f41ace24545ad 100644 (file)
@@ -52,6 +52,7 @@ static void msg_save_callback(void *context)
 {
        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 @@ static void msg_get_callback(enum dsync_msg_get_result result,
 
        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 @@ dsync_brain_msg_sync_add_new_msg(struct dsync_brain_msg_iter *dest_iter,
                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,
index 893c5bca35430c5ea1c63d3e18b0d6fd2247b49e..3d655a974a35bac836438d79e92cd8e91c531707 100644 (file)
@@ -122,6 +122,7 @@ struct dsync_brain {
        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;
index 710efd4e6edf9c62561107c88efd77b4e2358b73..cb6339baf94db084d10e52fb3a56461f7f81a164 100644 (file)
@@ -55,6 +55,8 @@ int dsync_brain_deinit(struct dsync_brain **_brain)
 
        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 @@ static void dsync_brain_worker_finished(bool success, void *context)
                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);
index 0e24d54616b5895932d5c6f9137c043efce2b7d8..79e655171abcd3ab16591e1b058a56b2ba81ddc6 100644 (file)
@@ -1562,8 +1562,8 @@ local_worker_save_msg_continue(struct local_dsync_worker *worker)
        worker->save_callback = NULL;
        i_stream_unref(&worker->save_input);
 
-       callback(worker->save_context);
        dsync_worker_try_finish(worker);
+       callback(worker->save_context);
 }
 
 static void