nettosphere icon indicating copy to clipboard operation
nettosphere copied to clipboard

NettyWebSocket.isOpen() fails with NullPointerException.

Open YaroslavSaakyan opened this issue 7 years ago • 2 comments

I use Nettosphere 2.4.10 with Atmosphere 2.4.24. I need to close Atmosphere resource on some conditions, but webSocket.isOpen() call inside of AtmosphereResourceImpl.close() method fails with NullPointerException.

    @Override
    public void close() throws IOException {
        event.setCloseByApplication(true);
        notifyListeners();
        cancel();
        if (webSocket != null && webSocket.isOpen()) {
            webSocket.close();
        }
    }

NettyWebSocket implementation of WebSocket is used. isOpen() method calls this.channel.isOpen(), but channel field is set to null after cancel() execution. After debugging I found that the reason is a change in org.atmosphere.nettosphere.BridgeRuntime.channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) method. It calls webSocket.recycle() which sets channel field to null. Looks like it was added in version 2.4.8.

YaroslavSaakyan avatar Aug 14 '18 13:08 YaroslavSaakyan

@YaroslavSaakyan Good job! Can you create a pull request? I will then cut a new release.

jfarcand avatar Aug 14 '18 13:08 jfarcand

@jfarcand Ok, I'll try to do it this week.

YaroslavSaakyan avatar Aug 15 '18 17:08 YaroslavSaakyan