From a67c98809c8a388675184a91260bff9362c801ad Mon Sep 17 00:00:00 2001 From: upendra rai Date: Mon, 12 Aug 2024 14:02:34 +0530 Subject: [PATCH] fix concurrent writes to websocket --- bybit_websocket.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bybit_websocket.go b/bybit_websocket.go index 78d8513..cae1ccb 100644 --- a/bybit_websocket.go +++ b/bybit_websocket.go @@ -6,6 +6,7 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "sync" "time" "github.com/google/uuid" @@ -14,6 +15,8 @@ import ( type MessageHandler func(message string) error +var mu sync.Mutex + func (b *WebSocket) handleIncomingMessages() { for { _, message, err := b.conn.ReadMessage() @@ -129,6 +132,8 @@ func Ping(b *WebSocket) { for { select { case <-ticker.C: // Wait until the ticker sends a signal + mu.Lock() + defer mu.Unlock() if err := b.conn.WriteMessage(websocket.PingMessage, nil); err != nil { fmt.Println("Failed to send ping:", err) } @@ -146,6 +151,8 @@ func (b *WebSocket) Disconnect() error { } func (b *WebSocket) Send(message string) error { + mu.Lock() + defer mu.Unlock() return b.conn.WriteMessage(websocket.TextMessage, []byte(message)) }