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