From cdd234dfe3c351de7d8caa5062b307bac850041c Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Fri, 2 Dec 2016 12:25:28 +0000 Subject: [PATCH] Ensure key agreement tasks finish if they ignore interrupts. --- .../plugin/droidtooth/DroidtoothPlugin.java | 9 ++++++--- .../keyagreement/KeyAgreementConnector.java | 17 +++++++++-------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java index ccd0fdf41f..20ca21d11a 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java @@ -341,8 +341,10 @@ class DroidtoothPlugin implements DuplexPlugin { LOG.info("Connected to " + scrubMacAddress(address)); return s; } catch (IOException e) { - if (LOG.isLoggable(INFO)) - LOG.info("Failed to connect to " + scrubMacAddress(address)); + if (LOG.isLoggable(INFO)) { + LOG.info("Failed to connect to " + scrubMacAddress(address) + + ": " + e); + } tryToClose(s); return null; } @@ -588,9 +590,10 @@ class DroidtoothPlugin implements DuplexPlugin { finished.countDown(); } else if (action.equals(FOUND)) { BluetoothDevice d = intent.getParcelableExtra(EXTRA_DEVICE); - if (LOG.isLoggable(INFO)) + if (LOG.isLoggable(INFO)) { LOG.info("Discovered device: " + scrubMacAddress(d.getAddress())); + } addresses.add(d.getAddress()); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java index ad3015bb4d..df6d28fa49 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java @@ -148,9 +148,9 @@ class KeyAgreementConnector { private void closePending(@Nullable KeyAgreementConnection chosen) { for (Future<KeyAgreementConnection> f : pending) { try { - if (f.cancel(true)) + if (f.cancel(true)) { LOG.info("Cancelled task"); - else if (!f.isCancelled()) { + } else if (!f.isCancelled()) { KeyAgreementConnection c = f.get(); if (c != null && c != chosen) tryToClose(c.getConnection(), false); @@ -193,9 +193,10 @@ class KeyAgreementConnector { @Override public KeyAgreementConnection call() throws Exception { - // Repeat attempts until we connect or get interrupted + // Repeat attempts until we connect, get interrupted, or time out while (true) { long now = clock.currentTimeMillis(); + if (now > end) throw new IOException(); DuplexTransportConnection conn = plugin.createKeyAgreementConnection(commitment, descriptor, end - now); @@ -221,8 +222,7 @@ class KeyAgreementConnector { } @Override - public KeyAgreementConnection call() - throws Exception { + public KeyAgreementConnection call() throws Exception { KeyAgreementConnection c = connectionTask.call(); InputStream in = c.getConnection().getReader().getInputStream(); boolean waitingSent = false; @@ -232,13 +232,14 @@ class KeyAgreementConnector { callbacks.connectionWaiting(); waitingSent = true; } - if (LOG.isLoggable(INFO)) - LOG.info(c.getTransportId().toString() + + if (LOG.isLoggable(INFO)) { + LOG.info(c.getTransportId().getString() + ": Waiting for connection"); + } Thread.sleep(1000); } if (!alice && LOG.isLoggable(INFO)) - LOG.info(c.getTransportId().toString() + ": Data available"); + LOG.info(c.getTransportId().getString() + ": Data available"); return c; } } -- GitLab