From f40abf1a18a78ee0779554d85d400cfde562c6c8 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 23 Nov 2012 22:36:47 +0000 Subject: [PATCH] Safer not to create a new queue for each connection (race condition). --- src/net/sf/briar/plugins/modem/ModemImpl.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/net/sf/briar/plugins/modem/ModemImpl.java b/src/net/sf/briar/plugins/modem/ModemImpl.java index d66907ce09..8d47e42fb7 100644 --- a/src/net/sf/briar/plugins/modem/ModemImpl.java +++ b/src/net/sf/briar/plugins/modem/ModemImpl.java @@ -32,12 +32,11 @@ class ModemImpl implements Modem, SerialPortEventListener { private final Callback callback; private final SerialPort port; private final AtomicBoolean initialised, offHook, connected; + private final BlockingQueue<byte[]> received; private final byte[] line; private int lineLen = 0; - // A fresh queue is used for each connection - private volatile BlockingQueue<byte[]> received; ModemImpl(Callback callback, String portName) { this.callback = callback; @@ -45,8 +44,8 @@ class ModemImpl implements Modem, SerialPortEventListener { initialised = new AtomicBoolean(false); offHook = new AtomicBoolean(false); connected = new AtomicBoolean(false); - line = new byte[MAX_LINE_LENGTH]; received = new LinkedBlockingQueue<byte[]>(); + line = new byte[MAX_LINE_LENGTH]; } public void init() throws IOException { @@ -121,7 +120,7 @@ class ModemImpl implements Modem, SerialPortEventListener { } public InputStream getInputStream() { - return new ModemInputStream(received); + return new ModemInputStream(); } public OutputStream getOutputStream() { @@ -137,7 +136,6 @@ class ModemImpl implements Modem, SerialPortEventListener { throw new IOException(e.toString()); } received.add(new byte[0]); // Empty buffer indicates EOF - received = new LinkedBlockingQueue<byte[]>(); connected.set(false); offHook.set(false); } @@ -236,15 +234,9 @@ class ModemImpl implements Modem, SerialPortEventListener { private class ModemInputStream extends InputStream { - private final BlockingQueue<byte[]> received; - private byte[] buf = null; private int offset = 0; - private ModemInputStream(BlockingQueue<byte[]> received) { - this.received = received; - } - @Override public int read() throws IOException { getBufferIfNecessary(); -- GitLab