Hold a wake lock while starting plugins.

This commit is contained in:
akwizgran
2020-08-10 17:23:25 +01:00
parent 1e2dc862ef
commit 3ecec61c25

View File

@@ -29,6 +29,7 @@ import org.briarproject.bramble.api.properties.TransportProperties;
import org.briarproject.bramble.api.properties.TransportPropertyManager; import org.briarproject.bramble.api.properties.TransportPropertyManager;
import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.system.WakefulIoExecutor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@@ -64,7 +65,7 @@ class PluginManagerImpl implements PluginManager, Service {
private static final Logger LOG = private static final Logger LOG =
getLogger(PluginManagerImpl.class.getName()); getLogger(PluginManagerImpl.class.getName());
private final Executor ioExecutor; private final Executor ioExecutor, wakefulIoExecutor;
private final EventBus eventBus; private final EventBus eventBus;
private final PluginConfig pluginConfig; private final PluginConfig pluginConfig;
private final ConnectionManager connectionManager; private final ConnectionManager connectionManager;
@@ -77,11 +78,15 @@ class PluginManagerImpl implements PluginManager, Service {
private final AtomicBoolean used = new AtomicBoolean(false); private final AtomicBoolean used = new AtomicBoolean(false);
@Inject @Inject
PluginManagerImpl(@IoExecutor Executor ioExecutor, EventBus eventBus, PluginManagerImpl(@IoExecutor Executor ioExecutor,
PluginConfig pluginConfig, ConnectionManager connectionManager, @WakefulIoExecutor Executor wakefulIoExecutor,
EventBus eventBus,
PluginConfig pluginConfig,
ConnectionManager connectionManager,
SettingsManager settingsManager, SettingsManager settingsManager,
TransportPropertyManager transportPropertyManager) { TransportPropertyManager transportPropertyManager) {
this.ioExecutor = ioExecutor; this.ioExecutor = ioExecutor;
this.wakefulIoExecutor = wakefulIoExecutor;
this.eventBus = eventBus; this.eventBus = eventBus;
this.pluginConfig = pluginConfig; this.pluginConfig = pluginConfig;
this.connectionManager = connectionManager; this.connectionManager = connectionManager;
@@ -109,7 +114,7 @@ class PluginManagerImpl implements PluginManager, Service {
simplexPlugins.add(s); simplexPlugins.add(s);
CountDownLatch startLatch = new CountDownLatch(1); CountDownLatch startLatch = new CountDownLatch(1);
startLatches.put(t, startLatch); startLatches.put(t, startLatch);
ioExecutor.execute(new PluginStarter(s, startLatch)); wakefulIoExecutor.execute(new PluginStarter(s, startLatch));
} }
} }
// Instantiate the duplex plugins and start them asynchronously // Instantiate the duplex plugins and start them asynchronously
@@ -125,7 +130,7 @@ class PluginManagerImpl implements PluginManager, Service {
duplexPlugins.add(d); duplexPlugins.add(d);
CountDownLatch startLatch = new CountDownLatch(1); CountDownLatch startLatch = new CountDownLatch(1);
startLatches.put(t, startLatch); startLatches.put(t, startLatch);
ioExecutor.execute(new PluginStarter(d, startLatch)); wakefulIoExecutor.execute(new PluginStarter(d, startLatch));
} }
} }
} }
@@ -137,12 +142,16 @@ class PluginManagerImpl implements PluginManager, Service {
LOG.info("Stopping simplex plugins"); LOG.info("Stopping simplex plugins");
for (SimplexPlugin s : simplexPlugins) { for (SimplexPlugin s : simplexPlugins) {
CountDownLatch startLatch = startLatches.get(s.getId()); CountDownLatch startLatch = startLatches.get(s.getId());
// Don't need the wakeful executor here as we wait for the plugin
// to stop before returning
ioExecutor.execute(new PluginStopper(s, startLatch, stopLatch)); ioExecutor.execute(new PluginStopper(s, startLatch, stopLatch));
} }
// Stop the duplex plugins // Stop the duplex plugins
LOG.info("Stopping duplex plugins"); LOG.info("Stopping duplex plugins");
for (DuplexPlugin d : duplexPlugins) { for (DuplexPlugin d : duplexPlugins) {
CountDownLatch startLatch = startLatches.get(d.getId()); CountDownLatch startLatch = startLatches.get(d.getId());
// Don't need the wakeful executor here as we wait for the plugin
// to stop before returning
ioExecutor.execute(new PluginStopper(d, startLatch, stopLatch)); ioExecutor.execute(new PluginStopper(d, startLatch, stopLatch));
} }
// Wait for all the plugins to stop // Wait for all the plugins to stop
@@ -205,7 +214,7 @@ class PluginManagerImpl implements PluginManager, Service {
} }
} }
private class PluginStarter implements Runnable { private static class PluginStarter implements Runnable {
private final Plugin plugin; private final Plugin plugin;
private final CountDownLatch startLatch; private final CountDownLatch startLatch;
@@ -235,7 +244,7 @@ class PluginManagerImpl implements PluginManager, Service {
} }
} }
private class PluginStopper implements Runnable { private static class PluginStopper implements Runnable {
private final Plugin plugin; private final Plugin plugin;
private final CountDownLatch startLatch, stopLatch; private final CountDownLatch startLatch, stopLatch;