Make sure the connection control doesn't emit any events after disconnect is called

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@555 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-06-21 21:03:32 +02:00
parent 6acf9d6078
commit af128b65b5

View file

@ -157,14 +157,16 @@ public class ConnectionControl implements IConnectionControl {
@Override @Override
public void disconnect() { public void disconnect() {
final Connection theConnection = connection;
connection = null;
connectedEvent = new Event(); connectedEvent = new Event();
connectionFailedEvent = new Event1<LoginError>(); connectionFailedEvent = new Event1<LoginError>();
run(new Runnable() { run(new Runnable() {
@Override @Override
public void run() { public void run() {
if (connection != null) { if (theConnection != null) {
connection.disconnect(); theConnection.disconnect();
connection = null;
} }
ConnectionControl.this.run(STOP_ACTION); ConnectionControl.this.run(STOP_ACTION);
} }
@ -502,6 +504,10 @@ public class ConnectionControl implements IConnectionControl {
} }
private void processPacket(Packet packet) { private void processPacket(Packet packet) {
if (connection == null) {
return;
}
DefaultPacketExtension extension = (DefaultPacketExtension) packet DefaultPacketExtension extension = (DefaultPacketExtension) packet
.getExtension(ELEMENT_NAME, NAMESPACE); .getExtension(ELEMENT_NAME, NAMESPACE);
@ -702,12 +708,15 @@ public class ConnectionControl implements IConnectionControl {
private abstract class SendRunner implements Runnable { private abstract class SendRunner implements Runnable {
@Override @Override
public void run() { public void run() {
if (connection != null) { // For thread safety
Connection theConnection = connection;
if (theConnection != null) {
DefaultPacketExtension extension = createJRummikubExtension(); DefaultPacketExtension extension = createJRummikubExtension();
addData(extension); addData(extension);
Message message = createMessage(extension); Message message = createMessage(extension);
modifyMessage(message); modifyMessage(message);
connection.sendPacket(message); theConnection.sendPacket(message);
} }
} }