diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 550c60d35..7c80ebffd 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -627,6 +627,9 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { if (s.getNamespace().equals(ID.getString())) { LOG.info("Tor settings updated"); settings = s.getSettings(); + // Works around a bug introduced in Tor 0.3.4.8. Could be + // replaced with callback.transportDisabled() when fixed. + disableNetwork(); updateConnectionStatus(networkManager.getNetworkStatus()); } } else if (e instanceof NetworkStatusEvent) { @@ -634,6 +637,16 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { } } + private void disableNetwork() { + connectionStatusExecutor.execute(() -> { + try { + enableNetwork(false); + } catch (IOException ex) { + logException(LOG, WARNING, ex); + } + }); + } + private void updateConnectionStatus(NetworkStatus status) { connectionStatusExecutor.execute(() -> { if (!running) return;