From d1771b0d67c54bd3a5fcb9f1c2ac84a311da14aa Mon Sep 17 00:00:00 2001 From: Nikita Date: Sun, 7 Jul 2013 09:02:46 +0400 Subject: [PATCH] SocketIOEncoder memory leak fixed --- .../java/com/corundumstudio/socketio/SocketIOEncoder.java | 8 +++++++- .../corundumstudio/socketio/SocketIOPipelineFactory.java | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java b/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java index f83e9fa..e8a0e25 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java @@ -57,9 +57,10 @@ import com.corundumstudio.socketio.messages.XHRPacketMessage; import com.corundumstudio.socketio.messages.XHROutMessage; import com.corundumstudio.socketio.parser.Encoder; import com.corundumstudio.socketio.parser.Packet; +import com.corundumstudio.socketio.transport.BaseClient; @Sharable -public class SocketIOEncoder extends SimpleChannelDownstreamHandler implements MessageHandler { +public class SocketIOEncoder extends SimpleChannelDownstreamHandler implements MessageHandler, Disconnectable { class XHRClientEntry { @@ -216,4 +217,9 @@ public class SocketIOEncoder extends SimpleChannelDownstreamHandler implements M sendMessage(xhrErrorMessage.getOrigin(), null, channel, message); } + @Override + public void onDisconnect(BaseClient client) { + sessionId2ActiveChannelId.remove(client.getSessionId()); + } + } diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOPipelineFactory.java b/src/main/java/com/corundumstudio/socketio/SocketIOPipelineFactory.java index 2145930..0696294 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOPipelineFactory.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOPipelineFactory.java @@ -181,13 +181,14 @@ public class SocketIOPipelineFactory implements ChannelPipelineFactory, Disconne } public void onDisconnect(BaseClient client) { - log.debug("Client with sessionId: {} disconnected", client.getSessionId()); heartbeatHandler.onDisconnect(client); ackManager.onDisconnect(client); xhrPollingTransport.onDisconnect(client); webSocketTransport.onDisconnect(client); flashSocketTransport.onDisconnect(client); authorizeHandler.onDisconnect(client); + socketIOEncoder.onDisconnect(client); + log.debug("Client with sessionId: {} disconnected", client.getSessionId()); } public void stop() {