From 70d9a37a4e96b95fb5f8d8d7101d06c488d564fd Mon Sep 17 00:00:00 2001 From: Roger Ferdinan Date: Wed, 1 Oct 2025 14:41:23 +0700 Subject: [PATCH] fix: pong data race --- v1/client/client.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/v1/client/client.go b/v1/client/client.go index 91b5272..1b3ed40 100644 --- a/v1/client/client.go +++ b/v1/client/client.go @@ -193,6 +193,7 @@ type SafeWebsocketClient struct { authenticateFn func(*SafeWebsocketClient) error writeChan chan Message + pongChan chan error } func (wsClient *SafeWebsocketClient) connect() error { @@ -267,6 +268,9 @@ func (wsClient *SafeWebsocketClient) connect() error { if err := c.WriteMessage(int(data.MessageType), data.Data); err != nil { log.Printf("error on write message: %v\n", err) wsClient.triggerReconnect() + if data.MessageType == MessageTypePong { + wsClient.pongChan <- err + } return } } @@ -324,18 +328,15 @@ func (wsClient *SafeWebsocketClient) connect() error { }() conn.SetPingHandler(func(pingData string) error { - // wsClient.writeChan <- Message{ - // MessageType: MessageTypePong, - // Data: []byte(pingData), - // } - if err := conn.WriteMessage(websocket.PongMessage, []byte(pingData)); err != nil { - if err == websocket.ErrCloseSent { - return nil - } - if netErr, ok := err.(interface{ Timeout() bool }); ok && netErr.Timeout() { - return nil - } + wsClient.writeChan <- Message{ + MessageType: MessageTypePong, + Data: []byte(pingData), + } + + select { + case err := <-wsClient.pongChan: return err + default: } return nil })