diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java index 39ba6ea9e48d263ec32e1c52336efabd7cf0a1b5..c74dccac815faed84ebddfdc85a7fe7074303c9c 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java @@ -170,7 +170,8 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { return false; } try { - ReliabilityLayer reliabilityLayer = new ReliabilityLayer(this); + ReliabilityLayer reliabilityLayer = + new ReliabilityLayer(executor, this); synchronized(this) { if(!initialised) { if(LOG.isLoggable(INFO)) @@ -348,7 +349,8 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { return; } try { - ReliabilityLayer reliabilityLayer = new ReliabilityLayer(this); + ReliabilityLayer reliabilityLayer = + new ReliabilityLayer(executor, this); synchronized(this) { if(!initialised) { if(LOG.isLoggable(INFO)) diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java index d033aa678aeeb8f68d48faa1027c7684784b68e3..b86b1b123680337eb7630a689c8697e3473c7ec6 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executor; import java.util.concurrent.LinkedBlockingQueue; import java.util.logging.Logger; @@ -17,6 +18,7 @@ class ReliabilityLayer implements ReadHandler, WriteHandler { private static final Logger LOG = Logger.getLogger(ReliabilityLayer.class.getName()); + private final Executor executor; private final WriteHandler writeHandler; private final BlockingQueue<byte[]> writes; @@ -24,10 +26,10 @@ class ReliabilityLayer implements ReadHandler, WriteHandler { private volatile SlipDecoder decoder = null; private volatile ReceiverInputStream inputStream = null; private volatile SenderOutputStream outputStream = null; - private volatile Thread writer = null; private volatile boolean running = false; - ReliabilityLayer(WriteHandler writeHandler) { + ReliabilityLayer(Executor executor, WriteHandler writeHandler) { + this.executor = executor; this.writeHandler = writeHandler; writes = new LinkedBlockingQueue<byte[]>(); } @@ -39,8 +41,8 @@ class ReliabilityLayer implements ReadHandler, WriteHandler { decoder = new SlipDecoder(receiver); inputStream = new ReceiverInputStream(receiver); outputStream = new SenderOutputStream(sender); - writer = new Thread("ReliabilityLayer") { - @Override + running = true; + executor.execute(new Runnable() { public void run() { long now = System.currentTimeMillis(); long next = now + TICK_INTERVAL; @@ -61,7 +63,7 @@ class ReliabilityLayer implements ReadHandler, WriteHandler { } } catch(InterruptedException e) { if(LOG.isLoggable(WARNING)) - LOG.warning("Interrupted while writing"); + LOG.warning("Interrupted while waiting to write"); Thread.currentThread().interrupt(); running = false; } catch(IOException e) { @@ -70,9 +72,7 @@ class ReliabilityLayer implements ReadHandler, WriteHandler { running = false; } } - }; - running = true; - writer.start(); + }); } InputStream getInputStream() {