Mercurial > dovecot > core-2.2
changeset 12124:eb5adb193064
dsync: Don't crash/hang if syncing fails before ioloop is started.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 15 Sep 2010 18:59:34 +0100 |
parents | f026e809113d |
children | 7000a9833b19 |
files | src/dsync/dsync-brain.c src/dsync/dsync-brain.h src/dsync/dsync.c |
diffstat | 3 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dsync/dsync-brain.c Wed Sep 15 16:28:32 2010 +0100 +++ b/src/dsync/dsync-brain.c Wed Sep 15 18:59:34 2010 +0100 @@ -900,3 +900,10 @@ 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); +}
--- a/src/dsync/dsync-brain.h Wed Sep 15 16:28:32 2010 +0100 +++ b/src/dsync/dsync-brain.h Wed Sep 15 18:59:34 2010 +0100 @@ -23,5 +23,6 @@ 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
--- a/src/dsync/dsync.c Wed Sep 15 16:28:32 2010 +0100 +++ b/src/dsync/dsync.c Wed Sep 15 18:59:34 2010 +0100 @@ -314,7 +314,8 @@ 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)