Skip to content

NPE during reconnect #1364

Closed
Closed

Description

@Xander-Polishchuk

Describe the bug
It's possible to get NPE in reconnectBlocking(), due to a race with previously running client connection thread.

The race happens due to closeLatch countdown called before connectReadThread is set to null in run

  • connectReadThread set to null at WebSocketClient.java:526
  • while countdown is called in a callback in engine.closeConnection WebSocketClient.java:524

To Reproduce
Steps to reproduce the behavior:

  1. Setup WS server
  2. Connect
  3. Call reconnectBlocking() in a loop until NPE

Expected behavior
No NPE on reconnectBlocking()

Debug log

java.lang.NullPointerException: Cannot invoke "java.lang.Thread.start()" because "this.connectReadThread" is null
    at org.java_websocket.client.WebSocketClient.connect(WebSocketClient.java:376)
    at org.java_websocket.client.WebSocketClient.connectBlocking(WebSocketClient.java:386)
    at org.java_websocket.client.WebSocketClient.reconnectBlocking(WebSocketClient.java:328)
    at org.web3j.protocol.websocket.WebSocketService.connectToWebSocket(WebSocketService.java:140)

Environment(please complete the following information):

  • Version used: 1.5.4
  • Java version: 17
  • Operating System and version: GCP, Linux container

Activity

  1. Xander-Polishchuk commented on Oct 17, 2023

    @Xander-Polishchuk
    Author

    While was trying to reproduce I identified another bug with WebSocketClient#closeBlocking, it sometimes gets stuck on closeLatch.await(), I'm going to create another bug for that.

  2. linked a pull request that will close this issueFix multiple issues related to reconnect #1367on Nov 1, 2023
  3. self-assigned this
    on Nov 3, 2023
  4. added this to the Release 1.5.5 milestone on Dec 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions