From: Timo Sirainen Date: Wed, 15 Sep 2010 17:59:34 +0000 (+0100) Subject: dsync: Don't crash/hang if syncing fails before ioloop is started. X-Git-Tag: 2.0.3~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9506271b89c285a13cb67c4d812a461851786659;p=thirdparty%2Fdovecot%2Fcore.git dsync: Don't crash/hang if syncing fails before ioloop is started. --- diff --git a/src/dsync/dsync-brain.c b/src/dsync/dsync-brain.c index 470fc78aed..ae745313da 100644 --- a/src/dsync/dsync-brain.c +++ b/src/dsync/dsync-brain.c @@ -900,3 +900,10 @@ bool dsync_brain_has_unexpected_changes(struct dsync_brain *brain) dsync_worker_has_unexpected_changes(brain->src_worker) || dsync_worker_has_unexpected_changes(brain->dest_worker); } + +bool dsync_brain_has_failed(struct dsync_brain *brain) +{ + return brain->failed || + dsync_worker_has_failed(brain->src_worker) || + dsync_worker_has_failed(brain->dest_worker); +} diff --git a/src/dsync/dsync-brain.h b/src/dsync/dsync-brain.h index 44e332d5d7..941091345f 100644 --- a/src/dsync/dsync-brain.h +++ b/src/dsync/dsync-brain.h @@ -23,5 +23,6 @@ void dsync_brain_sync(struct dsync_brain *brain); void dsync_brain_sync_all(struct dsync_brain *brain); bool dsync_brain_has_unexpected_changes(struct dsync_brain *brain); +bool dsync_brain_has_failed(struct dsync_brain *brain); #endif diff --git a/src/dsync/dsync.c b/src/dsync/dsync.c index 01c53363e2..489d3f1e20 100644 --- a/src/dsync/dsync.c +++ b/src/dsync/dsync.c @@ -314,7 +314,8 @@ int main(int argc, char *argv[]) server = NULL; dsync_brain_sync(brain); - master_service_run(master_service, dsync_connected); + if (!dsync_brain_has_failed(brain)) + master_service_run(master_service, dsync_connected); } if (brain == NULL)