Skip to content

Commit

Permalink
fix: issue 675:goroutine leak when connectionUp(true) return error
Browse files Browse the repository at this point in the history
  • Loading branch information
kiqi007 committed May 19, 2024
1 parent fe38f80 commit 386b731
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -604,14 +604,25 @@ func (c *client) startCommsWorkers(conn net.Conn, connectionUp connCompletedFn,
// The connection is now ready for use (we spin up a few go routines below). It is possible that
// Disconnect has been called in the interim...
if err := connectionUp(true); err != nil {
DEBUG.Println(CLI, err)
close(c.stop) // Tidy up anything we have already started
close(incomingPubChan)
c.workers.Wait()
c.conn.Close()
c.conn = nil
return false
ERROR.Println(CLI, err)

/* issue 675:goroutine leak when connectionUp(true) return error
* Only when status == disconnecting will this logic be executed.
* The goroutine that changes the status to disconnecting should be
* responsible for resource cleanup (which is indeed how it is done).
*
* Being disconnected right when the connection is established is a special case.
* Even if we remove this check for connectionUp(true), the program must still function correctly,
* as if a Disconnect event occurred immediately after connectionUp(true) completed.
*/

//close(c.stop) // Tidy up anything we have already started
//close(incomingPubChan)
//c.workers.Wait()
//c.conn.Close()
//c.conn = nil
}

DEBUG.Println(CLI, "client is connected/reconnected")
if c.options.OnConnect != nil {
go c.options.OnConnect(c)
Expand Down

0 comments on commit 386b731

Please sign in to comment.