diff --git a/briar-android/res/values/roboguice.xml b/briar-android/res/values/roboguice.xml
index 0f6ffcd91..32110839f 100644
--- a/briar-android/res/values/roboguice.xml
+++ b/briar-android/res/values/roboguice.xml
@@ -10,7 +10,6 @@
- org.briarproject.messaging.duplex.DuplexMessagingModule
- org.briarproject.messaging.simplex.SimplexMessagingModule
- org.briarproject.plugins.AndroidPluginsModule
- - org.briarproject.plugins.PluginsModule
- org.briarproject.serial.SerialModule
- org.briarproject.system.AndroidSystemModule
- org.briarproject.transport.TransportModule
diff --git a/briar-android/src/org/briarproject/android/SplashScreenActivity.java b/briar-android/src/org/briarproject/android/SplashScreenActivity.java
index ff48381cd..c0b7a1514 100644
--- a/briar-android/src/org/briarproject/android/SplashScreenActivity.java
+++ b/briar-android/src/org/briarproject/android/SplashScreenActivity.java
@@ -30,8 +30,8 @@ public class SplashScreenActivity extends RoboSplashActivity {
private static final Logger LOG =
Logger.getLogger(SplashScreenActivity.class.getName());
- // This build expires on 12 July 2014
- private static final long EXPIRY_DATE = 1405123200 * 1000L;
+ // This build expires on 8 October 2014
+ private static final long EXPIRY_DATE = 1412726400 * 1000L;
private long now = System.currentTimeMillis();
diff --git a/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java b/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java
index 2228b8b5b..ce9b724b1 100644
--- a/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java
+++ b/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java
@@ -7,8 +7,8 @@ import java.util.concurrent.Executor;
import org.briarproject.api.android.AndroidExecutor;
import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.plugins.PluginExecutor;
import org.briarproject.api.plugins.duplex.DuplexPluginConfig;
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
@@ -21,12 +21,9 @@ import org.briarproject.plugins.tor.TorPluginFactory;
import android.app.Application;
import android.content.Context;
-import com.google.inject.AbstractModule;
import com.google.inject.Provides;
-public class AndroidPluginsModule extends AbstractModule {
-
- protected void configure() {}
+public class AndroidPluginsModule extends PluginsModule {
@Provides
SimplexPluginConfig getSimplexPluginConfig() {
@@ -38,19 +35,17 @@ public class AndroidPluginsModule extends AbstractModule {
}
@Provides
- DuplexPluginConfig getDuplexPluginConfig(
- @PluginExecutor Executor pluginExecutor,
+ DuplexPluginConfig getDuplexPluginConfig(@IoExecutor Executor ioExecutor,
AndroidExecutor androidExecutor, Application app,
CryptoComponent crypto, LocationUtils locationUtils,
ShutdownManager shutdownManager) {
Context appContext = app.getApplicationContext();
- DuplexPluginFactory bluetooth = new DroidtoothPluginFactory(
- pluginExecutor, androidExecutor, appContext,
- crypto.getSecureRandom());
- DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
- appContext, locationUtils, shutdownManager);
- DuplexPluginFactory lan = new AndroidLanTcpPluginFactory(
- pluginExecutor, appContext);
+ DuplexPluginFactory bluetooth = new DroidtoothPluginFactory(ioExecutor,
+ androidExecutor, appContext, crypto.getSecureRandom());
+ DuplexPluginFactory tor = new TorPluginFactory(ioExecutor, appContext,
+ locationUtils, shutdownManager);
+ DuplexPluginFactory lan = new AndroidLanTcpPluginFactory(ioExecutor,
+ appContext);
final Collection factories =
Arrays.asList(bluetooth, tor, lan);
return new DuplexPluginConfig() {
diff --git a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java
index aaa38352b..1b65e45c8 100644
--- a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java
+++ b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java
@@ -63,7 +63,7 @@ class DroidtoothPlugin implements DuplexPlugin {
private static final String DISCOVERY_FINISHED =
"android.bluetooth.adapter.action.DISCOVERY_FINISHED";
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final AndroidExecutor androidExecutor;
private final Context appContext;
private final SecureRandom secureRandom;
@@ -80,11 +80,11 @@ class DroidtoothPlugin implements DuplexPlugin {
// Non-null if the plugin started successfully
private volatile BluetoothAdapter adapter = null;
- DroidtoothPlugin(Executor pluginExecutor, AndroidExecutor androidExecutor,
+ DroidtoothPlugin(Executor ioExecutor, AndroidExecutor androidExecutor,
Context appContext, SecureRandom secureRandom, Clock clock,
DuplexPluginCallback callback, int maxFrameLength, long maxLatency,
long pollingInterval) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.androidExecutor = androidExecutor;
this.appContext = appContext;
this.secureRandom = secureRandom;
@@ -147,7 +147,7 @@ class DroidtoothPlugin implements DuplexPlugin {
}
private void bind() {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
if(!isRunning()) return;
if(LOG.isLoggable(INFO))
@@ -256,7 +256,7 @@ class DroidtoothPlugin implements DuplexPlugin {
if(StringUtils.isNullOrEmpty(address)) continue;
final String uuid = e.getValue().get("uuid");
if(StringUtils.isNullOrEmpty(uuid)) continue;
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
if(!running) return;
BluetoothSocket s = connect(address, uuid);
diff --git a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java
index 4015185fa..b7bb20285 100644
--- a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java
+++ b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java
@@ -19,16 +19,16 @@ public class DroidtoothPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 3 * 60 * 1000; // 3 minutes
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final AndroidExecutor androidExecutor;
private final Context appContext;
private final SecureRandom secureRandom;
private final Clock clock;
- public DroidtoothPluginFactory(Executor pluginExecutor,
+ public DroidtoothPluginFactory(Executor ioExecutor,
AndroidExecutor androidExecutor, Context appContext,
SecureRandom secureRandom) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.androidExecutor = androidExecutor;
this.appContext = appContext;
this.secureRandom = secureRandom;
@@ -40,7 +40,7 @@ public class DroidtoothPluginFactory implements DuplexPluginFactory {
}
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
- return new DroidtoothPlugin(pluginExecutor, androidExecutor, appContext,
+ return new DroidtoothPlugin(ioExecutor, androidExecutor, appContext,
secureRandom, clock, callback, MAX_FRAME_LENGTH, MAX_LATENCY,
POLLING_INTERVAL);
}
diff --git a/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPlugin.java b/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPlugin.java
index 5092d4537..eaec50c41 100644
--- a/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPlugin.java
+++ b/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPlugin.java
@@ -25,10 +25,10 @@ class AndroidLanTcpPlugin extends LanTcpPlugin {
private volatile BroadcastReceiver networkStateReceiver = null;
- AndroidLanTcpPlugin(Executor pluginExecutor, Context appContext,
+ AndroidLanTcpPlugin(Executor ioExecutor, Context appContext,
DuplexPluginCallback callback, int maxFrameLength, long maxLatency,
long pollingInterval) {
- super(pluginExecutor, callback, maxFrameLength, maxLatency,
+ super(ioExecutor, callback, maxFrameLength, maxLatency,
pollingInterval);
this.appContext = appContext;
}
diff --git a/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPluginFactory.java b/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPluginFactory.java
index dec3bf711..a51326e55 100644
--- a/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPluginFactory.java
+++ b/briar-android/src/org/briarproject/plugins/tcp/AndroidLanTcpPluginFactory.java
@@ -15,12 +15,11 @@ public class AndroidLanTcpPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 60 * 1000; // 1 minute
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final Context appContext;
- public AndroidLanTcpPluginFactory(Executor pluginExecutor,
- Context appContext) {
- this.pluginExecutor = pluginExecutor;
+ public AndroidLanTcpPluginFactory(Executor ioExecutor, Context appContext) {
+ this.ioExecutor = ioExecutor;
this.appContext = appContext;
}
@@ -29,7 +28,7 @@ public class AndroidLanTcpPluginFactory implements DuplexPluginFactory {
}
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
- return new AndroidLanTcpPlugin(pluginExecutor, appContext, callback,
+ return new AndroidLanTcpPlugin(ioExecutor, appContext, callback,
MAX_FRAME_LENGTH, MAX_LATENCY, POLLING_INTERVAL);
}
}
diff --git a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
index 7ac2f5394..207f0935d 100644
--- a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
+++ b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
@@ -72,7 +72,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
private static final Logger LOG =
Logger.getLogger(TorPlugin.class.getName());
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final Context appContext;
private final LocationUtils locationUtils;
private final ShutdownManager shutdownManager;
@@ -92,11 +92,11 @@ class TorPlugin implements DuplexPlugin, EventHandler {
private volatile TorControlConnection controlConnection = null;
private volatile BroadcastReceiver networkStateReceiver = null;
- TorPlugin(Executor pluginExecutor, Context appContext,
+ TorPlugin(Executor ioExecutor, Context appContext,
LocationUtils locationUtils, ShutdownManager shutdownManager,
DuplexPluginCallback callback, int maxFrameLength, long maxLatency,
long pollingInterval) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.appContext = appContext;
this.locationUtils = locationUtils;
this.shutdownManager = shutdownManager;
@@ -448,7 +448,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
}
private void bind() {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
// If there's already a port number stored in config, reuse it
String portString = callback.getConfig().get("port");
@@ -476,7 +476,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
c.put("port", localPort);
callback.mergeConfig(c);
// Create a hidden service if necessary
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
publishHiddenService(localPort);
}
@@ -605,7 +605,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
}
private void connectAndCallBack(final ContactId c) {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
DuplexTransportConnection d = createConnection(c);
if(d != null) callback.outgoingConnectionCreated(c, d);
diff --git a/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java b/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java
index 0990b6aca..d8947dca9 100644
--- a/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java
+++ b/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java
@@ -22,14 +22,14 @@ public class TorPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 3 * 60 * 1000; // 3 minutes
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final Context appContext;
private final LocationUtils locationUtils;
private final ShutdownManager shutdownManager;
- public TorPluginFactory(Executor pluginExecutor, Context appContext,
+ public TorPluginFactory(Executor ioExecutor, Context appContext,
LocationUtils locationUtils, ShutdownManager shutdownManager) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.appContext = appContext;
this.locationUtils = locationUtils;
this.shutdownManager = shutdownManager;
@@ -45,7 +45,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
LOG.info("Tor is not supported on this architecture");
return null;
}
- return new TorPlugin(pluginExecutor,appContext, locationUtils,
+ return new TorPlugin(ioExecutor,appContext, locationUtils,
shutdownManager, callback, MAX_FRAME_LENGTH, MAX_LATENCY,
POLLING_INTERVAL);
}
diff --git a/briar-api/src/org/briarproject/api/plugins/PluginExecutor.java b/briar-api/src/org/briarproject/api/lifecycle/IoExecutor.java
similarity index 74%
rename from briar-api/src/org/briarproject/api/plugins/PluginExecutor.java
rename to briar-api/src/org/briarproject/api/lifecycle/IoExecutor.java
index fb0892ebf..01e0ea499 100644
--- a/briar-api/src/org/briarproject/api/plugins/PluginExecutor.java
+++ b/briar-api/src/org/briarproject/api/lifecycle/IoExecutor.java
@@ -1,4 +1,4 @@
-package org.briarproject.api.plugins;
+package org.briarproject.api.lifecycle;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
@@ -10,8 +10,8 @@ import java.lang.annotation.Target;
import com.google.inject.BindingAnnotation;
-/** Annotation for injecting the executor used by transport plugins. */
+/** Annotation for injecting the executor used by long-lived IO tasks. */
@BindingAnnotation
@Target({ FIELD, METHOD, PARAMETER })
@Retention(RUNTIME)
-public @interface PluginExecutor {}
\ No newline at end of file
+public @interface IoExecutor {}
\ No newline at end of file
diff --git a/briar-api/src/org/briarproject/api/transport/IncomingConnectionExecutor.java b/briar-api/src/org/briarproject/api/transport/IncomingConnectionExecutor.java
deleted file mode 100644
index d70554de6..000000000
--- a/briar-api/src/org/briarproject/api/transport/IncomingConnectionExecutor.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.briarproject.api.transport;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-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 for recognising incoming connections.
- */
-@BindingAnnotation
-@Target({ FIELD, METHOD, PARAMETER })
-@Retention(RUNTIME)
-public @interface IncomingConnectionExecutor {}
\ No newline at end of file
diff --git a/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java b/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java
index 8c6c7360f..0714a0555 100644
--- a/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java
+++ b/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java
@@ -1,18 +1,49 @@
package org.briarproject.lifecycle;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+
import javax.inject.Singleton;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.lifecycle.ShutdownManager;
import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
public class LifecycleModule extends AbstractModule {
+ private final ExecutorService ioExecutor;
+
+ public LifecycleModule() {
+ // The thread pool is unbounded, so use direct handoff
+ BlockingQueue queue = new SynchronousQueue();
+ // Discard tasks that are submitted during shutdown
+ RejectedExecutionHandler policy =
+ new ThreadPoolExecutor.DiscardPolicy();
+ // Create threads as required and keep them in the pool for 60 seconds
+ ioExecutor = new ThreadPoolExecutor(0, Integer.MAX_VALUE,
+ 60, SECONDS, queue, policy);
+ }
+
+ @Override
protected void configure() {
bind(LifecycleManager.class).to(
LifecycleManagerImpl.class).in(Singleton.class);
bind(ShutdownManager.class).to(
ShutdownManagerImpl.class).in(Singleton.class);
}
+
+ @Provides @Singleton @IoExecutor
+ Executor getIoExecutor(LifecycleManager lifecycleManager) {
+ lifecycleManager.registerForShutdown(ioExecutor);
+ return ioExecutor;
+ }
}
diff --git a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
index 3cdfbe9a9..722897476 100644
--- a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
+++ b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
@@ -23,9 +23,9 @@ import org.briarproject.api.TransportId;
import org.briarproject.api.TransportProperties;
import org.briarproject.api.db.DatabaseComponent;
import org.briarproject.api.db.DbException;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.plugins.Plugin;
import org.briarproject.api.plugins.PluginCallback;
-import org.briarproject.api.plugins.PluginExecutor;
import org.briarproject.api.plugins.PluginManager;
import org.briarproject.api.plugins.duplex.DuplexPlugin;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
@@ -49,7 +49,7 @@ class PluginManagerImpl implements PluginManager {
private static final Logger LOG =
Logger.getLogger(PluginManagerImpl.class.getName());
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final SimplexPluginConfig simplexPluginConfig;
private final DuplexPluginConfig duplexPluginConfig;
private final Clock clock;
@@ -62,12 +62,12 @@ class PluginManagerImpl implements PluginManager {
private final List duplexPlugins;
@Inject
- PluginManagerImpl(@PluginExecutor Executor pluginExecutor,
+ PluginManagerImpl(@IoExecutor Executor ioExecutor,
SimplexPluginConfig simplexPluginConfig,
DuplexPluginConfig duplexPluginConfig, Clock clock,
DatabaseComponent db, Poller poller,
ConnectionDispatcher dispatcher, UiCallback uiCallback) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.simplexPluginConfig = simplexPluginConfig;
this.duplexPluginConfig = duplexPluginConfig;
this.clock = clock;
@@ -87,14 +87,14 @@ class PluginManagerImpl implements PluginManager {
simplexPluginConfig.getFactories();
final CountDownLatch sLatch = new CountDownLatch(sFactories.size());
for(SimplexPluginFactory factory : sFactories)
- pluginExecutor.execute(new SimplexPluginStarter(factory, sLatch));
+ ioExecutor.execute(new SimplexPluginStarter(factory, sLatch));
// Instantiate and start the duplex plugins
LOG.info("Starting duplex plugins");
Collection dFactories =
duplexPluginConfig.getFactories();
final CountDownLatch dLatch = new CountDownLatch(dFactories.size());
for(DuplexPluginFactory factory : dFactories)
- pluginExecutor.execute(new DuplexPluginStarter(factory, dLatch));
+ ioExecutor.execute(new DuplexPluginStarter(factory, dLatch));
// Wait for the plugins to start
try {
sLatch.await();
@@ -119,11 +119,11 @@ class PluginManagerImpl implements PluginManager {
// Stop the simplex plugins
LOG.info("Stopping simplex plugins");
for(SimplexPlugin plugin : simplexPlugins)
- pluginExecutor.execute(new PluginStopper(plugin, latch));
+ ioExecutor.execute(new PluginStopper(plugin, latch));
// Stop the duplex plugins
LOG.info("Stopping duplex plugins");
for(DuplexPlugin plugin : duplexPlugins)
- pluginExecutor.execute(new PluginStopper(plugin, latch));
+ ioExecutor.execute(new PluginStopper(plugin, latch));
plugins.clear();
simplexPlugins.clear();
duplexPlugins.clear();
diff --git a/briar-core/src/org/briarproject/plugins/PluginsModule.java b/briar-core/src/org/briarproject/plugins/PluginsModule.java
index f905d2c32..aca1ef52c 100644
--- a/briar-core/src/org/briarproject/plugins/PluginsModule.java
+++ b/briar-core/src/org/briarproject/plugins/PluginsModule.java
@@ -1,18 +1,8 @@
package org.briarproject.plugins;
-import static java.util.concurrent.TimeUnit.SECONDS;
-
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionHandler;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
import javax.inject.Singleton;
import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.plugins.PluginExecutor;
import org.briarproject.api.plugins.PluginManager;
import com.google.inject.AbstractModule;
@@ -20,19 +10,7 @@ import com.google.inject.Provides;
public class PluginsModule extends AbstractModule {
- private final ExecutorService pluginExecutor;
-
- public PluginsModule() {
- // The thread pool is unbounded, so use direct handoff
- BlockingQueue queue = new SynchronousQueue();
- // Discard tasks that are submitted during shutdown
- RejectedExecutionHandler policy =
- new ThreadPoolExecutor.DiscardPolicy();
- // Create threads as required and keep them in the pool for 60 seconds
- pluginExecutor = new ThreadPoolExecutor(0, Integer.MAX_VALUE,
- 60, SECONDS, queue, policy);
- }
-
+ @Override
protected void configure() {
bind(Poller.class).to(PollerImpl.class);
}
@@ -43,10 +21,4 @@ public class PluginsModule extends AbstractModule {
lifecycleManager.register(pluginManager);
return pluginManager;
}
-
- @Provides @Singleton @PluginExecutor
- Executor getPluginExecutor(LifecycleManager lifecycleManager) {
- lifecycleManager.registerForShutdown(pluginExecutor);
- return pluginExecutor;
- }
}
diff --git a/briar-core/src/org/briarproject/plugins/PollerImpl.java b/briar-core/src/org/briarproject/plugins/PollerImpl.java
index 6d331877b..a92cdf4cd 100644
--- a/briar-core/src/org/briarproject/plugins/PollerImpl.java
+++ b/briar-core/src/org/briarproject/plugins/PollerImpl.java
@@ -9,8 +9,8 @@ import java.util.logging.Logger;
import javax.inject.Inject;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.PluginExecutor;
import org.briarproject.api.system.Timer;
import org.briarproject.api.transport.ConnectionRegistry;
@@ -19,14 +19,14 @@ class PollerImpl implements Poller {
private static final Logger LOG =
Logger.getLogger(PollerImpl.class.getName());
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final ConnectionRegistry connRegistry;
private final Timer timer;
@Inject
- PollerImpl(@PluginExecutor Executor pluginExecutor,
- ConnectionRegistry connRegistry, Timer timer) {
- this.pluginExecutor = pluginExecutor;
+ PollerImpl(@IoExecutor Executor ioExecutor, ConnectionRegistry connRegistry,
+ Timer timer) {
+ this.ioExecutor = ioExecutor;
this.connRegistry = connRegistry;
this.timer = timer;
}
@@ -49,7 +49,7 @@ class PollerImpl implements Poller {
}
public void pollNow(final Plugin p) {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
if(LOG.isLoggable(INFO))
LOG.info("Polling " + p.getClass().getSimpleName());
@@ -66,6 +66,7 @@ class PollerImpl implements Poller {
this.plugin = plugin;
}
+ @Override
public void run() {
pollNow(plugin);
schedule(plugin, false);
diff --git a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java b/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
index 3e5854524..60628f33e 100644
--- a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
+++ b/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
@@ -25,7 +25,7 @@ public abstract class FilePlugin implements SimplexPlugin {
private static final Logger LOG =
Logger.getLogger(FilePlugin.class.getName());
- protected final Executor pluginExecutor;
+ protected final Executor ioExecutor;
protected final FileUtils fileUtils;
protected final SimplexPluginCallback callback;
protected final int maxFrameLength;
@@ -38,10 +38,10 @@ public abstract class FilePlugin implements SimplexPlugin {
protected abstract void writerFinished(File f);
protected abstract void readerFinished(File f);
- protected FilePlugin(Executor pluginExecutor, FileUtils fileUtils,
+ protected FilePlugin(Executor ioExecutor, FileUtils fileUtils,
SimplexPluginCallback callback, int maxFrameLength,
long maxLatency) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.fileUtils = fileUtils;
this.callback = callback;
this.maxFrameLength = maxFrameLength;
@@ -100,7 +100,7 @@ public abstract class FilePlugin implements SimplexPlugin {
protected void createReaderFromFile(final File f) {
if(!running) return;
- pluginExecutor.execute(new ReaderCreator(f));
+ ioExecutor.execute(new ReaderCreator(f));
}
private class ReaderCreator implements Runnable {
diff --git a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java
index d4d3c5062..39e4b9418 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java
@@ -16,9 +16,9 @@ class LanTcpPlugin extends TcpPlugin {
static final TransportId ID = new TransportId("lan");
- LanTcpPlugin(Executor pluginExecutor, DuplexPluginCallback callback,
+ LanTcpPlugin(Executor ioExecutor, DuplexPluginCallback callback,
int maxFrameLength, long maxLatency, long pollingInterval) {
- super(pluginExecutor, callback, maxFrameLength, maxLatency,
+ super(ioExecutor, callback, maxFrameLength, maxLatency,
pollingInterval);
}
diff --git a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
index eb24e4550..02b53eab9 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
@@ -13,10 +13,10 @@ public class LanTcpPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 60 * 1000; // 1 minute
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
- public LanTcpPluginFactory(Executor pluginExecutor) {
- this.pluginExecutor = pluginExecutor;
+ public LanTcpPluginFactory(Executor ioExecutor) {
+ this.ioExecutor = ioExecutor;
}
public TransportId getId() {
@@ -24,7 +24,7 @@ public class LanTcpPluginFactory implements DuplexPluginFactory {
}
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
- return new LanTcpPlugin(pluginExecutor, callback, MAX_FRAME_LENGTH,
+ return new LanTcpPlugin(ioExecutor, callback, MAX_FRAME_LENGTH,
MAX_LATENCY, POLLING_INTERVAL);
}
}
diff --git a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
index c5de9d6c8..a8d3e8dde 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
@@ -35,7 +35,7 @@ abstract class TcpPlugin implements DuplexPlugin {
private static final Logger LOG =
Logger.getLogger(TcpPlugin.class.getName());
- protected final Executor pluginExecutor;
+ protected final Executor ioExecutor;
protected final DuplexPluginCallback callback;
protected final int maxFrameLength;
protected final long maxLatency, pollingInterval;
@@ -52,9 +52,9 @@ abstract class TcpPlugin implements DuplexPlugin {
/** Returns true if connections to the given address can be attempted. */
protected abstract boolean isConnectable(InetSocketAddress remote);
- protected TcpPlugin(Executor pluginExecutor, DuplexPluginCallback callback,
+ protected TcpPlugin(Executor ioExecutor, DuplexPluginCallback callback,
int maxFrameLength, long maxLatency, long pollingInterval) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.callback = callback;
this.maxFrameLength = maxFrameLength;
this.maxLatency = maxLatency;
@@ -76,7 +76,7 @@ abstract class TcpPlugin implements DuplexPlugin {
}
protected void bind() {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
if(!running) return;
ServerSocket ss = null;
@@ -172,7 +172,7 @@ abstract class TcpPlugin implements DuplexPlugin {
}
private void connectAndCallBack(final ContactId c) {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
DuplexTransportConnection d = createConnection(c);
if(d != null) callback.outgoingConnectionCreated(c, d);
diff --git a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java
index 7a403b636..6e2e3e754 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java
@@ -20,10 +20,10 @@ class WanTcpPlugin extends TcpPlugin {
private volatile MappingResult mappingResult;
- WanTcpPlugin(Executor pluginExecutor, DuplexPluginCallback callback,
+ WanTcpPlugin(Executor ioExecutor, DuplexPluginCallback callback,
int maxFrameLength, long maxLatency, long pollingInterval,
PortMapper portMapper) {
- super(pluginExecutor, callback, maxFrameLength, maxLatency,
+ super(ioExecutor, callback, maxFrameLength, maxLatency,
pollingInterval);
this.portMapper = portMapper;
}
diff --git a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java b/briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java
index a6de80173..f478bbc29 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java
@@ -14,12 +14,12 @@ public class WanTcpPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 5 * 60 * 1000; // 5 minutes
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final ShutdownManager shutdownManager;
- public WanTcpPluginFactory(Executor pluginExecutor,
+ public WanTcpPluginFactory(Executor ioExecutor,
ShutdownManager shutdownManager) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.shutdownManager = shutdownManager;
}
@@ -28,7 +28,7 @@ public class WanTcpPluginFactory implements DuplexPluginFactory {
}
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
- return new WanTcpPlugin(pluginExecutor, callback, MAX_FRAME_LENGTH,
+ return new WanTcpPlugin(ioExecutor, callback, MAX_FRAME_LENGTH,
MAX_LATENCY, POLLING_INTERVAL,
new PortMapperImpl(shutdownManager));
}
diff --git a/briar-core/src/org/briarproject/transport/ConnectionDispatcherImpl.java b/briar-core/src/org/briarproject/transport/ConnectionDispatcherImpl.java
index f37495e9f..9844ad30e 100644
--- a/briar-core/src/org/briarproject/transport/ConnectionDispatcherImpl.java
+++ b/briar-core/src/org/briarproject/transport/ConnectionDispatcherImpl.java
@@ -14,6 +14,7 @@ import javax.inject.Inject;
import org.briarproject.api.ContactId;
import org.briarproject.api.TransportId;
import org.briarproject.api.db.DbException;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.messaging.duplex.DuplexConnectionFactory;
import org.briarproject.api.messaging.simplex.SimplexConnectionFactory;
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
@@ -22,31 +23,30 @@ import org.briarproject.api.plugins.simplex.SimplexTransportWriter;
import org.briarproject.api.transport.ConnectionContext;
import org.briarproject.api.transport.ConnectionDispatcher;
import org.briarproject.api.transport.ConnectionRecogniser;
-import org.briarproject.api.transport.IncomingConnectionExecutor;
class ConnectionDispatcherImpl implements ConnectionDispatcher {
private static final Logger LOG =
Logger.getLogger(ConnectionDispatcherImpl.class.getName());
- private final Executor connExecutor;
+ private final Executor ioExecutor;
private final ConnectionRecogniser recogniser;
private final SimplexConnectionFactory simplexConnFactory;
private final DuplexConnectionFactory duplexConnFactory;
@Inject
- ConnectionDispatcherImpl(@IncomingConnectionExecutor Executor connExecutor,
+ ConnectionDispatcherImpl(@IoExecutor Executor ioExecutor,
ConnectionRecogniser recogniser,
SimplexConnectionFactory simplexConnFactory,
DuplexConnectionFactory duplexConnFactory) {
- this.connExecutor = connExecutor;
+ this.ioExecutor = ioExecutor;
this.recogniser = recogniser;
this.simplexConnFactory = simplexConnFactory;
this.duplexConnFactory = duplexConnFactory;
}
public void dispatchReader(TransportId t, SimplexTransportReader r) {
- connExecutor.execute(new DispatchSimplexConnection(t, r));
+ ioExecutor.execute(new DispatchSimplexConnection(t, r));
}
public void dispatchWriter(ContactId c, TransportId t,
@@ -56,7 +56,7 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
public void dispatchIncomingConnection(TransportId t,
DuplexTransportConnection d) {
- connExecutor.execute(new DispatchDuplexConnection(t, d));
+ ioExecutor.execute(new DispatchDuplexConnection(t, d));
}
public void dispatchOutgoingConnection(ContactId c, TransportId t,
diff --git a/briar-core/src/org/briarproject/transport/TransportModule.java b/briar-core/src/org/briarproject/transport/TransportModule.java
index b53c7f7c1..3fec3a806 100644
--- a/briar-core/src/org/briarproject/transport/TransportModule.java
+++ b/briar-core/src/org/briarproject/transport/TransportModule.java
@@ -1,14 +1,5 @@
package org.briarproject.transport;
-import static java.util.concurrent.TimeUnit.SECONDS;
-
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionHandler;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
import javax.inject.Singleton;
import org.briarproject.api.crypto.KeyManager;
@@ -18,26 +9,13 @@ import org.briarproject.api.transport.ConnectionReaderFactory;
import org.briarproject.api.transport.ConnectionRecogniser;
import org.briarproject.api.transport.ConnectionRegistry;
import org.briarproject.api.transport.ConnectionWriterFactory;
-import org.briarproject.api.transport.IncomingConnectionExecutor;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
public class TransportModule extends AbstractModule {
- private final ExecutorService incomingConnectionExecutor;
-
- public TransportModule() {
- // The thread pool is unbounded, so use direct handoff
- BlockingQueue queue = new SynchronousQueue();
- // Discard tasks that are submitted during shutdown
- RejectedExecutionHandler policy =
- new ThreadPoolExecutor.DiscardPolicy();
- // Create threads as required and keep them in the pool for 60 seconds
- incomingConnectionExecutor = new ThreadPoolExecutor(0,
- Integer.MAX_VALUE, 60, SECONDS, queue, policy);
- }
-
+ @Override
protected void configure() {
bind(ConnectionDispatcher.class).to(ConnectionDispatcherImpl.class);
bind(ConnectionReaderFactory.class).to(
@@ -55,10 +33,4 @@ public class TransportModule extends AbstractModule {
lifecycleManager.register(keyManager);
return keyManager;
}
-
- @Provides @Singleton @IncomingConnectionExecutor
- Executor getIncomingConnectionExecutor(LifecycleManager lifecycleManager) {
- lifecycleManager.registerForShutdown(incomingConnectionExecutor);
- return incomingConnectionExecutor;
- }
}
diff --git a/briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java b/briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java
index 8395bc8cf..ea12c7098 100644
--- a/briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java
+++ b/briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java
@@ -4,21 +4,20 @@ import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.lifecycle.ShutdownManager;
import org.briarproject.util.OsUtils;
-import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
-public class DesktopLifecycleModule extends AbstractModule {
+public class DesktopLifecycleModule extends LifecycleModule {
+ @Override
protected void configure() {
bind(LifecycleManager.class).to(
LifecycleManagerImpl.class).in(Singleton.class);
if(OsUtils.isWindows()) {
bind(ShutdownManager.class).to(
- WindowsShutdownManagerImpl.class).in(
- Singleton.class);
+ WindowsShutdownManagerImpl.class).in(Singleton.class);
} else {
bind(ShutdownManager.class).to(
- ShutdownManagerImpl.class).in(Singleton.class);
+ ShutdownManagerImpl.class).in(Singleton.class);
}
}
}
diff --git a/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java b/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java
index 021b80301..58be0ce51 100644
--- a/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java
+++ b/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java
@@ -5,8 +5,8 @@ import java.util.Collection;
import java.util.concurrent.Executor;
import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.plugins.PluginExecutor;
import org.briarproject.api.plugins.duplex.DuplexPluginConfig;
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
@@ -19,18 +19,15 @@ import org.briarproject.plugins.modem.ModemPluginFactory;
import org.briarproject.plugins.tcp.LanTcpPluginFactory;
import org.briarproject.plugins.tcp.WanTcpPluginFactory;
-import com.google.inject.AbstractModule;
import com.google.inject.Provides;
-public class DesktopPluginsModule extends AbstractModule {
-
- public void configure() {}
+public class DesktopPluginsModule extends PluginsModule {
@Provides
- SimplexPluginConfig getSimplexPluginConfig(
- @PluginExecutor Executor pluginExecutor, FileUtils fileUtils) {
+ SimplexPluginConfig getSimplexPluginConfig(@IoExecutor Executor ioExecutor,
+ FileUtils fileUtils) {
SimplexPluginFactory removable =
- new RemovableDrivePluginFactory(pluginExecutor, fileUtils);
+ new RemovableDrivePluginFactory(ioExecutor, fileUtils);
final Collection factories =
Arrays.asList(removable);
return new SimplexPluginConfig() {
@@ -41,16 +38,15 @@ public class DesktopPluginsModule extends AbstractModule {
}
@Provides
- DuplexPluginConfig getDuplexPluginConfig(
- @PluginExecutor Executor pluginExecutor,
+ DuplexPluginConfig getDuplexPluginConfig(@IoExecutor Executor ioExecutor,
CryptoComponent crypto, ReliabilityLayerFactory reliabilityFactory,
ShutdownManager shutdownManager) {
DuplexPluginFactory bluetooth = new BluetoothPluginFactory(
- pluginExecutor, crypto.getSecureRandom());
- DuplexPluginFactory modem = new ModemPluginFactory(pluginExecutor,
+ ioExecutor, crypto.getSecureRandom());
+ DuplexPluginFactory modem = new ModemPluginFactory(ioExecutor,
reliabilityFactory);
- DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor);
- DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
+ DuplexPluginFactory lan = new LanTcpPluginFactory(ioExecutor);
+ DuplexPluginFactory wan = new WanTcpPluginFactory(ioExecutor,
shutdownManager);
final Collection factories =
Arrays.asList(bluetooth, modem, lan, wan);
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
index 364b44a51..82f69bee2 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
+++ b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
@@ -42,7 +42,7 @@ class BluetoothPlugin implements DuplexPlugin {
Logger.getLogger(BluetoothPlugin.class.getName());
private static final int UUID_BYTES = 16;
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final Clock clock;
private final SecureRandom secureRandom;
private final DuplexPluginCallback callback;
@@ -54,10 +54,10 @@ class BluetoothPlugin implements DuplexPlugin {
private volatile StreamConnectionNotifier socket = null;
private volatile LocalDevice localDevice = null;
- BluetoothPlugin(Executor pluginExecutor, Clock clock,
- SecureRandom secureRandom, DuplexPluginCallback callback,
- int maxFrameLength, long maxLatency, long pollingInterval) {
- this.pluginExecutor = pluginExecutor;
+ BluetoothPlugin(Executor ioExecutor, Clock clock, SecureRandom secureRandom,
+ DuplexPluginCallback callback, int maxFrameLength, long maxLatency,
+ long pollingInterval) {
+ this.ioExecutor = ioExecutor;
this.clock = clock;
this.secureRandom = secureRandom;
this.callback = callback;
@@ -96,7 +96,7 @@ class BluetoothPlugin implements DuplexPlugin {
}
private void bind() {
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
if(!running) return;
// Advertise the Bluetooth address to contacts
@@ -197,7 +197,7 @@ class BluetoothPlugin implements DuplexPlugin {
if(StringUtils.isNullOrEmpty(address)) continue;
final String uuid = e.getValue().get("uuid");
if(StringUtils.isNullOrEmpty(uuid)) continue;
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
if(!running) return;
StreamConnection s = connect(makeUrl(address, uuid));
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
index 8e4963f79..446846305 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
+++ b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
@@ -16,13 +16,13 @@ public class BluetoothPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 3 * 60 * 1000; // 3 minutes
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final SecureRandom secureRandom;
private final Clock clock;
- public BluetoothPluginFactory(Executor pluginExecutor,
+ public BluetoothPluginFactory(Executor ioExecutor,
SecureRandom secureRandom) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.secureRandom = secureRandom;
clock = new SystemClock();
}
@@ -32,7 +32,7 @@ public class BluetoothPluginFactory implements DuplexPluginFactory {
}
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
- return new BluetoothPlugin(pluginExecutor, clock, secureRandom,
- callback, MAX_FRAME_LENGTH, MAX_LATENCY, POLLING_INTERVAL);
+ return new BluetoothPlugin(ioExecutor, clock, secureRandom, callback,
+ MAX_FRAME_LENGTH, MAX_LATENCY, POLLING_INTERVAL);
}
}
diff --git a/briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java b/briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java
index a7b0208c7..2d8fd2876 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java
+++ b/briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java
@@ -11,7 +11,7 @@ class PollingRemovableDriveMonitor implements RemovableDriveMonitor, Runnable {
private static final Logger LOG =
Logger.getLogger(PollingRemovableDriveMonitor.class.getName());
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final RemovableDriveFinder finder;
private final long pollingInterval;
private final Object pollingLock = new Object();
@@ -19,9 +19,9 @@ class PollingRemovableDriveMonitor implements RemovableDriveMonitor, Runnable {
private volatile boolean running = false;
private volatile Callback callback = null;
- public PollingRemovableDriveMonitor(Executor pluginExecutor,
+ public PollingRemovableDriveMonitor(Executor ioExecutor,
RemovableDriveFinder finder, long pollingInterval) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.finder = finder;
this.pollingInterval = pollingInterval;
}
@@ -29,7 +29,7 @@ class PollingRemovableDriveMonitor implements RemovableDriveMonitor, Runnable {
public void start(Callback callback) throws IOException {
this.callback = callback;
running = true;
- pluginExecutor.execute(this);
+ ioExecutor.execute(this);
}
public void stop() throws IOException {
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
index 76a5a0f67..09ffd6f66 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
+++ b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
@@ -27,11 +27,11 @@ implements RemovableDriveMonitor.Callback {
private final RemovableDriveFinder finder;
private final RemovableDriveMonitor monitor;
- RemovableDrivePlugin(Executor pluginExecutor, FileUtils fileUtils,
+ RemovableDrivePlugin(Executor ioExecutor, FileUtils fileUtils,
SimplexPluginCallback callback, RemovableDriveFinder finder,
RemovableDriveMonitor monitor, int maxFrameLength,
long maxLatency) {
- super(pluginExecutor, fileUtils, callback, maxFrameLength, maxLatency);
+ super(ioExecutor, fileUtils, callback, maxFrameLength, maxLatency);
this.finder = finder;
this.monitor = monitor;
}
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java
index 5b948cde3..01688d403 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java
+++ b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java
@@ -17,12 +17,12 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory {
private static final long MAX_LATENCY = 14 * 24 * 60 * 60 * 1000;
private static final long POLLING_INTERVAL = 10 * 1000; // 10 seconds
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final FileUtils fileUtils;
- public RemovableDrivePluginFactory(Executor pluginExecutor,
+ public RemovableDrivePluginFactory(Executor ioExecutor,
FileUtils fileUtils) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.fileUtils = fileUtils;
}
@@ -42,16 +42,16 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory {
} else if(OsUtils.isMac()) {
// JNotify requires OS X 10.5 or newer, so we have to poll
finder = new MacRemovableDriveFinder();
- monitor = new PollingRemovableDriveMonitor(pluginExecutor, finder,
+ monitor = new PollingRemovableDriveMonitor(ioExecutor, finder,
POLLING_INTERVAL);
} else if(OsUtils.isWindows()) {
finder = new WindowsRemovableDriveFinder();
- monitor = new PollingRemovableDriveMonitor(pluginExecutor, finder,
+ monitor = new PollingRemovableDriveMonitor(ioExecutor, finder,
POLLING_INTERVAL);
} else {
return null;
}
- return new RemovableDrivePlugin(pluginExecutor, fileUtils, callback,
+ return new RemovableDrivePlugin(ioExecutor, fileUtils, callback,
finder, monitor, MAX_FRAME_LENGTH, MAX_LATENCY);
}
}
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java b/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
index 7d23028cd..22d45eb02 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
+++ b/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
@@ -32,7 +32,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
private static final Logger LOG =
Logger.getLogger(ModemPlugin.class.getName());
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final ModemFactory modemFactory;
private final SerialPortList serialPortList;
private final DuplexPluginCallback callback;
@@ -43,11 +43,11 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
private volatile boolean running = false;
private volatile Modem modem = null;
- ModemPlugin(Executor pluginExecutor, ModemFactory modemFactory,
+ ModemPlugin(Executor ioExecutor, ModemFactory modemFactory,
SerialPortList serialPortList, DuplexPluginCallback callback,
int maxFrameLength, long maxLatency, long pollingInterval,
boolean shuffle) {
- this.pluginExecutor = pluginExecutor;
+ this.ioExecutor = ioExecutor;
this.modemFactory = modemFactory;
this.serialPortList = serialPortList;
this.callback = callback;
@@ -112,7 +112,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
public void poll(Collection connected) {
if(!connected.isEmpty()) return; // One at a time please
- pluginExecutor.execute(new Runnable() {
+ ioExecutor.execute(new Runnable() {
public void run() {
poll();
}
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java b/briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java
index b32dcd01e..4fff4bbfa 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java
+++ b/briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java
@@ -15,14 +15,14 @@ public class ModemPluginFactory implements DuplexPluginFactory {
private static final long MAX_LATENCY = 60 * 1000; // 1 minute
private static final long POLLING_INTERVAL = 60 * 60 * 1000; // 1 hour
- private final Executor pluginExecutor;
+ private final Executor ioExecutor;
private final ModemFactory modemFactory;
private final SerialPortList serialPortList;
- public ModemPluginFactory(Executor pluginExecutor,
+ public ModemPluginFactory(Executor ioExecutor,
ReliabilityLayerFactory reliabilityFactory) {
- this.pluginExecutor = pluginExecutor;
- modemFactory = new ModemFactoryImpl(pluginExecutor, reliabilityFactory);
+ this.ioExecutor = ioExecutor;
+ modemFactory = new ModemFactoryImpl(ioExecutor, reliabilityFactory);
serialPortList = new SerialPortListImpl();
}
@@ -34,7 +34,7 @@ public class ModemPluginFactory implements DuplexPluginFactory {
// This plugin is not enabled by default
String enabled = callback.getConfig().get("enabled");
if(StringUtils.isNullOrEmpty(enabled)) return null;
- return new ModemPlugin(pluginExecutor, modemFactory, serialPortList,
+ return new ModemPlugin(ioExecutor, modemFactory, serialPortList,
callback, MAX_FRAME_LENGTH, MAX_LATENCY, POLLING_INTERVAL,
true);
}
diff --git a/briar-tests/src/org/briarproject/TestLifecycleModule.java b/briar-tests/src/org/briarproject/TestLifecycleModule.java
index becccd452..580b445e2 100644
--- a/briar-tests/src/org/briarproject/TestLifecycleModule.java
+++ b/briar-tests/src/org/briarproject/TestLifecycleModule.java
@@ -1,7 +1,10 @@
package org.briarproject;
+import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.briarproject.api.lifecycle.IoExecutor;
import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.lifecycle.Service;
import org.briarproject.api.lifecycle.ShutdownManager;
@@ -10,6 +13,7 @@ import com.google.inject.AbstractModule;
public class TestLifecycleModule extends AbstractModule {
+ @Override
protected void configure() {
bind(LifecycleManager.class).toInstance(new LifecycleManager() {
@@ -37,5 +41,7 @@ public class TestLifecycleModule extends AbstractModule {
return true;
}
});
+ bind(Executor.class).annotatedWith(IoExecutor.class).toInstance(
+ Executors.newCachedThreadPool());
}
}
diff --git a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
index 7c861bc72..43fcc4e9f 100644
--- a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
+++ b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
@@ -29,7 +29,7 @@ public class PluginManagerImplTest extends BriarTestCase {
public void testStartAndStop() throws Exception {
Clock clock = new SystemClock();
Mockery context = new Mockery();
- final Executor pluginExecutor = Executors.newCachedThreadPool();
+ final Executor ioExecutor = Executors.newCachedThreadPool();
final SimplexPluginConfig simplexPluginConfig =
context.mock(SimplexPluginConfig.class);
final DuplexPluginConfig duplexPluginConfig =
@@ -116,7 +116,7 @@ public class PluginManagerImplTest extends BriarTestCase {
oneOf(simplexPlugin).stop();
oneOf(duplexPlugin).stop();
}});
- PluginManagerImpl p = new PluginManagerImpl(pluginExecutor,
+ PluginManagerImpl p = new PluginManagerImpl(ioExecutor,
simplexPluginConfig, duplexPluginConfig, clock, db, poller,
dispatcher, uiCallback);
// Two plugins should be started and stopped
diff --git a/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java b/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java
index 40dc56579..d008330a2 100644
--- a/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java
+++ b/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java
@@ -15,7 +15,6 @@ import org.briarproject.api.ContactId;
import org.briarproject.api.TransportProperties;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-
import org.hamcrest.Description;
import org.jmock.Expectations;
import org.jmock.Mockery;
@@ -194,8 +193,7 @@ public class ModemPluginTest extends BriarTestCase {
@Test
public void testPolling() throws Exception {
- final ExecutorService pluginExecutor =
- Executors.newSingleThreadExecutor();
+ final ExecutorService ioExecutor = Executors.newSingleThreadExecutor();
Mockery context = new Mockery();
final ModemFactory modemFactory = context.mock(ModemFactory.class);
final SerialPortList serialPortList =
@@ -203,7 +201,7 @@ public class ModemPluginTest extends BriarTestCase {
final DuplexPluginCallback callback =
context.mock(DuplexPluginCallback.class);
// Disable shuffling for this test, it confuses jMock
- final ModemPlugin plugin = new ModemPlugin(pluginExecutor, modemFactory,
+ final ModemPlugin plugin = new ModemPlugin(ioExecutor, modemFactory,
serialPortList, callback, 0, 0, 0, false);
final Modem modem = context.mock(Modem.class);
final TransportProperties local = new TransportProperties();
@@ -265,7 +263,7 @@ public class ModemPluginTest extends BriarTestCase {
assertTrue(plugin.start());
plugin.poll(Collections.emptyList());
assertTrue(disposeAction.invoked.await(5, SECONDS));
- pluginExecutor.shutdown();
+ ioExecutor.shutdown();
context.assertIsSatisfied();
}