From d09e3f7f4f321a36c5c1044f5f66d5cdfa7ba0fe Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 8 Oct 2012 16:24:10 +0400 Subject: [PATCH] Ack timeout fixed --- .../corundumstudio/socketio/ack/AckManager.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/corundumstudio/socketio/ack/AckManager.java b/src/main/java/com/corundumstudio/socketio/ack/AckManager.java index 114c8d6..c0bd82f 100644 --- a/src/main/java/com/corundumstudio/socketio/ack/AckManager.java +++ b/src/main/java/com/corundumstudio/socketio/ack/AckManager.java @@ -109,8 +109,13 @@ public class AckManager implements Disconnectable { } private AckCallback removeCallback(UUID sessionId, long index) { - AckEntry ackEntry = getAckEntry(sessionId); - return ackEntry.removeCallback(index); + AckEntry ackEntry = ackEntries.get(sessionId); + // may be null if client disconnected + // before timeout occurs + if (ackEntry != null) { + return ackEntry.removeCallback(index); + } + return null; } public AckCallback getCallback(UUID sessionId, long index) { @@ -148,13 +153,7 @@ public class AckManager implements Disconnectable { @Override public void onDisconnect(BaseClient client) { - AckEntry entry = ackEntries.remove(client.getSessionId()); - if (entry != null) { - for (Long index : entry.getAckIndexes()) { - SchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, client.getSessionId(), index); - scheduler.cancel(key); - } - } + ackEntries.remove(client.getSessionId()); } }