From 3c543b0d625d4a27c26049439e6046ea01ee2616 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Wed, 20 Jan 2016 15:03:10 +0000
Subject: [PATCH] Fixed crash caused by using DB too early in lifecycle.

---
 .../api/sync/ValidationManager.java            |  2 +-
 .../org/briarproject/forum/ForumModule.java    |  2 +-
 .../messaging/MessagingModule.java             |  3 ++-
 .../src/org/briarproject/sync/SyncModule.java  |  6 ++++--
 .../sync/ValidationManagerImpl.java            | 18 +++++++++++++++---
 5 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/briar-api/src/org/briarproject/api/sync/ValidationManager.java b/briar-api/src/org/briarproject/api/sync/ValidationManager.java
index 35fcea79c4..4de322bc0c 100644
--- a/briar-api/src/org/briarproject/api/sync/ValidationManager.java
+++ b/briar-api/src/org/briarproject/api/sync/ValidationManager.java
@@ -27,5 +27,5 @@ public interface ValidationManager {
 	}
 
 	/** Sets the message validator for the given client. */
-	void setMessageValidator(ClientId c, MessageValidator v);
+	void registerMessageValidator(ClientId c, MessageValidator v);
 }
diff --git a/briar-core/src/org/briarproject/forum/ForumModule.java b/briar-core/src/org/briarproject/forum/ForumModule.java
index 94f0f829cd..3d82cdfe44 100644
--- a/briar-core/src/org/briarproject/forum/ForumModule.java
+++ b/briar-core/src/org/briarproject/forum/ForumModule.java
@@ -34,7 +34,7 @@ public class ForumModule extends AbstractModule {
 		ForumPostValidator validator = new ForumPostValidator(crypto,
 				bdfReaderFactory, bdfWriterFactory, authorReader,
 				metadataEncoder, clock);
-		validationManager.setMessageValidator(forumManager.getClientId(),
+		validationManager.registerMessageValidator(forumManager.getClientId(),
 				validator);
 		return validator;
 	}
diff --git a/briar-core/src/org/briarproject/messaging/MessagingModule.java b/briar-core/src/org/briarproject/messaging/MessagingModule.java
index 1854afcc76..0e55193e04 100644
--- a/briar-core/src/org/briarproject/messaging/MessagingModule.java
+++ b/briar-core/src/org/briarproject/messaging/MessagingModule.java
@@ -27,7 +27,8 @@ public class MessagingModule extends AbstractModule {
 			Clock clock) {
 		PrivateMessageValidator validator = new PrivateMessageValidator(
 				bdfReaderFactory, metadataEncoder, clock);
-		validationManager.setMessageValidator(messagingManager.getClientId(),
+		validationManager.registerMessageValidator(
+				messagingManager.getClientId(),
 				validator);
 		return validator;
 	}
diff --git a/briar-core/src/org/briarproject/sync/SyncModule.java b/briar-core/src/org/briarproject/sync/SyncModule.java
index 77633c7d2f..f90c6c1ecc 100644
--- a/briar-core/src/org/briarproject/sync/SyncModule.java
+++ b/briar-core/src/org/briarproject/sync/SyncModule.java
@@ -7,6 +7,7 @@ import org.briarproject.api.data.ObjectReader;
 import org.briarproject.api.event.EventBus;
 import org.briarproject.api.identity.Author;
 import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupFactory;
 import org.briarproject.api.sync.MessageFactory;
@@ -48,8 +49,9 @@ public class SyncModule extends AbstractModule {
 	}
 
 	@Provides @Singleton
-	ValidationManager getValidationManager(EventBus eventBus,
-			ValidationManagerImpl validationManager) {
+	ValidationManager getValidationManager(LifecycleManager lifecycleManager,
+			EventBus eventBus, ValidationManagerImpl validationManager) {
+		lifecycleManager.register(validationManager);
 		eventBus.addListener(validationManager);
 		return validationManager;
 	}
diff --git a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
index 9f977ef15b..28e248ae42 100644
--- a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
+++ b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
@@ -13,6 +13,7 @@ import org.briarproject.api.db.NoSuchSubscriptionException;
 import org.briarproject.api.event.Event;
 import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
+import org.briarproject.api.lifecycle.Service;
 import org.briarproject.api.sync.ClientId;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.Message;
@@ -29,7 +30,8 @@ import java.util.logging.Logger;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
 
-class ValidationManagerImpl implements ValidationManager, EventListener {
+class ValidationManagerImpl implements ValidationManager, Service,
+		EventListener {
 
 	private static final Logger LOG =
 			Logger.getLogger(ValidationManagerImpl.class.getName());
@@ -50,9 +52,19 @@ class ValidationManagerImpl implements ValidationManager, EventListener {
 	}
 
 	@Override
-	public void setMessageValidator(ClientId c, MessageValidator v) {
+	public boolean start() {
+		for (ClientId c : validators.keySet()) getMessagesToValidate(c);
+		return true;
+	}
+
+	@Override
+	public boolean stop() {
+		return true;
+	}
+
+	@Override
+	public void registerMessageValidator(ClientId c, MessageValidator v) {
 		validators.put(c, v);
-		getMessagesToValidate(c);
 	}
 
 	private void getMessagesToValidate(final ClientId c) {
-- 
GitLab