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 29612322874cc9d976ee1a9c30140b54fa41cc09..45ca855b2e119acb149edf20bb5a82bd8690484a 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java @@ -49,6 +49,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { connected = new AtomicBoolean(false); line = new byte[MAX_LINE_LENGTH]; reliabilityLayer = new ReliabilityLayer(this); + reliabilityLayer.start(); } public void start() throws IOException { @@ -69,7 +70,6 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { } if(!foundBaudRate) throw new IOException("Could not find a suitable baud rate"); - reliabilityLayer.start(); port.addEventListener(this); port.purgePort(PURGE_RXCLEAR | PURGE_TXCLEAR); port.writeBytes("ATZ\r\n".getBytes("US-ASCII")); // Reset @@ -150,6 +150,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { } reliabilityLayer.stop(); reliabilityLayer = new ReliabilityLayer(this); + reliabilityLayer.start(); connected.set(false); offHook.release(); } 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 838c9c46b8516a905f0a769cc4bb53ed5ca460d7..edf67ac576edf81f7afba4c7ff477367c148abfb 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java @@ -70,6 +70,7 @@ class ReliabilityLayer implements ReadHandler, WriteHandler { } void stop() { + if(!running) throw new IllegalStateException(); running = false; receiver.invalidate(); writes.add(new byte[0]); // Poison pill