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 0000000000000000000000000000000000000000..a7ca755f3da933c883e3657d9c053376a22445fd --- /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 968fb2425f5ed11a3ca24c041c8b01be874b2aac..d4c192d763403c7ae92827f7f37b2c4e548bd131 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 25437bcffc58175549e0c72870c5936fb55697ed..411f817b0737682cb00b447573d266f16f713681 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 9f8e20034de8273318fa5408e4e6084d06744c2c..784d14360bfb097498fb5fc1058e084568dbd707 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); }