From 92bd56aac0743b79b301220d4a02f38d6ac27565 Mon Sep 17 00:00:00 2001 From: Roger Ferdinan Date: Tue, 30 Sep 2025 10:33:30 +0700 Subject: [PATCH] fix: fixing data race --- v1/client/client.go | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/v1/client/client.go b/v1/client/client.go index f6a311b..4e37d79 100644 --- a/v1/client/client.go +++ b/v1/client/client.go @@ -260,18 +260,24 @@ func (wsClient *SafeWebsocketClient) connect() error { return nil }) + var c *websocket.Conn + wsClient.mu.ReadHandler(func() error { + c = conn + return nil + }) + for { select { case <-ctx.Done(): log.Println("Writer stopped due to client shutdown") return case data := <-wsClient.writeChan: - if conn == nil { + if c == nil { wsClient.triggerReconnect() return } - if err := conn.WriteMessage(int(data.MessageType), data.Data); err != nil { + if err := c.WriteMessage(int(data.MessageType), data.Data); err != nil { log.Printf("error on write message: %v\n", err) wsClient.triggerReconnect() return @@ -287,22 +293,28 @@ func (wsClient *SafeWebsocketClient) connect() error { return nil }) + var c *websocket.Conn + + wsClient.mu.ReadHandler(func() error { + c = conn + return nil + }) + if c == nil { + wsClient.triggerReconnect() + return + } for { select { case <-ctx.Done(): log.Println("Reader stopped due to client shutdown") return default: - if conn == nil { - wsClient.triggerReconnect() - return - } - if err := conn.SetReadDeadline(time.Now().Add(readDeadline)); err != nil { + if err := c.SetReadDeadline(time.Now().Add(readDeadline)); err != nil { log.Printf("error on read deadline: %v\n", err) return } - messageType, data, err := conn.ReadMessage() + messageType, data, err := c.ReadMessage() if err != nil { log.Printf("error on read message: %v\n", err) wsClient.triggerReconnect()