diff options
-rw-r--r-- | src/jrummikub/control/network/ConnectionControl.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java index 785350e..b5886ca 100644 --- a/src/jrummikub/control/network/ConnectionControl.java +++ b/src/jrummikub/control/network/ConnectionControl.java @@ -157,14 +157,16 @@ public class ConnectionControl implements IConnectionControl { @Override public void disconnect() { + final Connection theConnection = connection; + connection = null; + connectedEvent = new Event(); connectionFailedEvent = new Event1<LoginError>(); run(new Runnable() { @Override public void run() { - if (connection != null) { - connection.disconnect(); - connection = null; + if (theConnection != null) { + theConnection.disconnect(); } ConnectionControl.this.run(STOP_ACTION); } @@ -502,6 +504,10 @@ public class ConnectionControl implements IConnectionControl { } private void processPacket(Packet packet) { + if (connection == null) { + return; + } + DefaultPacketExtension extension = (DefaultPacketExtension) packet .getExtension(ELEMENT_NAME, NAMESPACE); @@ -702,12 +708,15 @@ public class ConnectionControl implements IConnectionControl { private abstract class SendRunner implements Runnable { @Override public void run() { - if (connection != null) { + // For thread safety + Connection theConnection = connection; + + if (theConnection != null) { DefaultPacketExtension extension = createJRummikubExtension(); addData(extension); Message message = createMessage(extension); modifyMessage(message); - connection.sendPacket(message); + theConnection.sendPacket(message); } } |