From: Timo Sirainen Date: Mon, 9 Aug 2010 18:59:19 +0000 (+0100) Subject: dsync: Error handling fixes. X-Git-Tag: 2.0.rc5~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f5be5eb58b858b25bc8b9c73e4ccddab026c6396;p=thirdparty%2Fdovecot%2Fcore.git dsync: Error handling fixes. Mainly fixes quota of quota error while saving. --- diff --git a/src/dsync/dsync-brain.c b/src/dsync/dsync-brain.c index b15305bf13..8c41d46966 100644 --- a/src/dsync/dsync-brain.c +++ b/src/dsync/dsync-brain.c @@ -879,6 +879,11 @@ void dsync_brain_sync_all(struct dsync_brain *brain) while (brain->state != DSYNC_STATE_SYNC_END) { old_state = brain->state; dsync_brain_sync(brain); + + if (dsync_worker_has_failed(brain->src_worker) || + dsync_worker_has_failed(brain->dest_worker)) + break; + i_assert(brain->state != old_state); } } diff --git a/src/dsync/dsync-proxy-server.c b/src/dsync/dsync-proxy-server.c index dd98ad5d67..d51bd50a46 100644 --- a/src/dsync/dsync-proxy-server.c +++ b/src/dsync/dsync-proxy-server.c @@ -52,8 +52,10 @@ static int proxy_server_run_cmd(struct dsync_proxy_server *server) if ((ret = server->cur_cmd->func(server, server->cur_args)) == 0) return 0; - if (ret < 0) + if (ret < 0) { i_error("command %s failed", server->cur_cmd->name); + return -1; + } server->cur_cmd = NULL; server->cur_args = NULL; diff --git a/src/dsync/dsync-worker.c b/src/dsync/dsync-worker.c index ff5ab50538..035924e246 100644 --- a/src/dsync/dsync-worker.c +++ b/src/dsync/dsync-worker.c @@ -228,7 +228,9 @@ void dsync_worker_msg_save(struct dsync_worker *worker, void *context) { if (!worker->readonly) { - if (!worker->failed) T_BEGIN { + if (worker->failed) + callback(context); + else T_BEGIN { worker->v.msg_save(worker, msg, data, callback, context); } T_END;