]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Don't crash/hang if syncing fails before ioloop is started.
authorTimo Sirainen <tss@iki.fi>
Wed, 15 Sep 2010 17:59:34 +0000 (18:59 +0100)
committerTimo Sirainen <tss@iki.fi>
Wed, 15 Sep 2010 17:59:34 +0000 (18:59 +0100)
src/dsync/dsync-brain.c
src/dsync/dsync-brain.h
src/dsync/dsync.c

index 470fc78aed9df980c9def77eb6e34f75a5832ea2..ae745313da3caf45974bceaff270e92457bb6ced 100644 (file)
@@ -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);
+}
index 44e332d5d71ff20d844b93fe9e4c846b06d711f1..941091345fdd42c769e3217c385aa32038a94260 100644 (file)
@@ -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
index 01c53363e23b81efec0e9cb077ead2f605ba5755..489d3f1e20ac809e5e36b480dcd1d724f9ab6d45 100644 (file)
@@ -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)