From 1537e58444b8067bade03de9ab6749c70467e24b Mon Sep 17 00:00:00 2001 From: Roger Ferdinan Date: Mon, 29 Sep 2025 16:38:08 +0700 Subject: [PATCH] fix: fixing deadlock caused by read mutex --- v1/client/client.go | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/v1/client/client.go b/v1/client/client.go index 9331db2..2206b21 100644 --- a/v1/client/client.go +++ b/v1/client/client.go @@ -253,30 +253,28 @@ func (wsClient *SafeWebsocketClient) startReceiveHandler(ctx context.Context) { log.Println("receive handler stopped") return default: - if err := wsClient.mu.ReadHandler(func() error { - conn := wsClient.conn + conn := wsClient.conn - if conn == nil { - wsClient.triggerReconnect() - return fmt.Errorf("connection closed") - } - _, message, err := conn.ReadMessage() - if err != nil { - wsClient.triggerReconnect() - return fmt.Errorf("failed to read message: %v", err) - } - select { - case wsClient.dataChannel <- message: - case <-ctx.Done(): - log.Println("Reconnect handler stopped") - return nil - default: - log.Println("Data channel full, dropping message") - } - return nil - }); err != nil { + if conn == nil { + wsClient.triggerReconnect() + return + // return fmt.Errorf("connection closed") + } + _, message, err := conn.ReadMessage() + if err != nil { + wsClient.triggerReconnect() + // return fmt.Errorf("failed to read message: %v", err) return } + select { + case wsClient.dataChannel <- message: + case <-ctx.Done(): + log.Println("Reconnect handler stopped") + return + default: + log.Println("Data channel full, dropping message") + } + return } } }