diff --git a/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java b/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java index 46eeaad..e6495bb 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java +++ b/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java @@ -83,6 +83,13 @@ public class WebSocketTransport extends BaseTransport { } else if (msg instanceof TextWebSocketFrame) { TextWebSocketFrame frame = (TextWebSocketFrame) msg; WebSocketClient client = channelId2Client.get(ctx.channel()); + if (client == null) { + log.debug("Client with was already disconnected. Channel closed!"); + ctx.channel().close(); + frame.release(); + return; + } + ctx.pipeline().fireChannelRead(new PacketsMessage(client, frame.content())); frame.release(); } else if (msg instanceof FullHttpRequest) { diff --git a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java index f4d8af0..737ae79 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java +++ b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java @@ -87,8 +87,11 @@ public class XHRPollingTransport extends BaseTransport { QueryStringDecoder queryDecoder = new QueryStringDecoder(req.getUri()); if (queryDecoder.path().startsWith(path)) { - handleMessage(req, queryDecoder, ctx); - req.release(); + try { + handleMessage(req, queryDecoder, ctx); + } finally { + req.release(); + } return; } }