From 7d42518952c4ac31cb33d3637b8beaefce1ae2b1 Mon Sep 17 00:00:00 2001 From: FZambia Date: Sun, 20 Oct 2024 15:08:42 +0300 Subject: [PATCH] fix deadlock --- client.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/client.go b/client.go index dde33a3..42fd41f 100644 --- a/client.go +++ b/client.go @@ -537,13 +537,17 @@ func (c *Client) moveToClosed() { }) } - c.mu.Lock() - defer c.mu.Unlock() + c.mu.RLock() + disconnectedCh := c.disconnectedCh + c.mu.RUnlock() // At this point connection close was issued, so we wait until the reader goroutine // finishes its work, after that it's safe to close the callback queue. - if c.disconnectedCh != nil { - <-c.disconnectedCh + if disconnectedCh != nil { + <-disconnectedCh } + + c.mu.Lock() + defer c.mu.Unlock() c.disconnectedCh = nil c.cbQueue.close() c.cbQueue = nil