From e0f6948bc447965c3700fea27c6e0e8be36dcfc3 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Tue, 12 Feb 2013 14:18:43 +0000
Subject: [PATCH] Fixed injection problems with plugin and reliability modules.

---
 .../api/reliability/ReliabilityExecutor.java      | 15 +++++++++++++++
 .../src/net/sf/briar/plugins/PluginsModule.java   |  5 ++---
 .../reliability/ReliabilityLayerFactoryImpl.java  |  6 +++++-
 .../sf/briar/reliability/ReliabilityModule.java   |  8 ++++++++
 4 files changed, 30 insertions(+), 4 deletions(-)
 create mode 100644 briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java

diff --git a/briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java b/briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java
new file mode 100644
index 0000000000..a7ca755f3d
--- /dev/null
+++ b/briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java
@@ -0,0 +1,15 @@
+package net.sf.briar.api.reliability;
+
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.BindingAnnotation;
+
+/** Annotation for injecting the executor used by reliability layers. */
+@BindingAnnotation
+@Target({ PARAMETER })
+@Retention(RUNTIME)
+public @interface ReliabilityExecutor {}
\ No newline at end of file
diff --git a/briar-core/src/net/sf/briar/plugins/PluginsModule.java b/briar-core/src/net/sf/briar/plugins/PluginsModule.java
index 968fb2425f..d4c192d763 100644
--- a/briar-core/src/net/sf/briar/plugins/PluginsModule.java
+++ b/briar-core/src/net/sf/briar/plugins/PluginsModule.java
@@ -2,7 +2,6 @@ package net.sf.briar.plugins;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -44,7 +43,7 @@ public class PluginsModule extends AbstractModule {
 
 	@Provides
 	SimplexPluginConfig getSimplexPluginConfig(
-			@PluginExecutor Executor pluginExecutor) {
+			@PluginExecutor ExecutorService pluginExecutor) {
 		final Collection<SimplexPluginFactory> factories =
 				new ArrayList<SimplexPluginFactory>();
 		if(!OsUtils.isAndroid()) {
@@ -61,7 +60,7 @@ public class PluginsModule extends AbstractModule {
 
 	@Provides
 	DuplexPluginConfig getDuplexPluginConfig(
-			@PluginExecutor Executor pluginExecutor,
+			@PluginExecutor ExecutorService pluginExecutor,
 			AndroidExecutor androidExecutor, Context appContext,
 			ReliabilityLayerFactory reliabilityFactory,
 			ShutdownManager shutdownManager) {
diff --git a/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
index 25437bcffc..411f817b07 100644
--- a/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
@@ -4,16 +4,20 @@ import java.util.concurrent.Executor;
 
 import net.sf.briar.api.clock.Clock;
 import net.sf.briar.api.clock.SystemClock;
+import net.sf.briar.api.reliability.ReliabilityExecutor;
 import net.sf.briar.api.reliability.ReliabilityLayer;
 import net.sf.briar.api.reliability.ReliabilityLayerFactory;
 import net.sf.briar.api.reliability.WriteHandler;
 
+import com.google.inject.Inject;
+
 class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
 
 	private final Executor executor;
 	private final Clock clock;
 
-	ReliabilityLayerFactoryImpl(Executor executor) {
+	@Inject
+	ReliabilityLayerFactoryImpl(@ReliabilityExecutor Executor executor) {
 		this.executor = executor;
 		clock = new SystemClock();
 	}
diff --git a/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java b/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
index 9f8e20034d..784d14360b 100644
--- a/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
@@ -1,5 +1,9 @@
 package net.sf.briar.reliability;
 
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+import net.sf.briar.api.reliability.ReliabilityExecutor;
 import net.sf.briar.api.reliability.ReliabilityLayerFactory;
 
 import com.google.inject.AbstractModule;
@@ -8,6 +12,10 @@ public class ReliabilityModule extends AbstractModule {
 
 	@Override
 	protected void configure() {
+		// The executor is unbounded - tasks are expected to be long-lived
+		bind(Executor.class).annotatedWith(
+				ReliabilityExecutor.class).toInstance(
+						Executors.newCachedThreadPool());
 		bind(ReliabilityLayerFactory.class).to(
 				ReliabilityLayerFactoryImpl.class);
 	}
-- 
GitLab