From e5d15d42d61a633bf007d80265a1a47c362aa69c Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 14 Dec 2012 21:24:12 +0000 Subject: [PATCH] Use an executor for the reliability layer's writer task. --- .../net/sf/briar/plugins/modem/ModemImpl.java | 6 ++++-- .../sf/briar/plugins/modem/ReliabilityLayer.java | 16 ++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) 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 39ba6ea9e4..c74dccac81 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 d033aa678a..b86b1b1236 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() { -- GitLab