feat(wsstream): add mutexes for thread-safe Read and Write operations

Add sync.Mutex fields writeMu and readMu to WsStream struct, and apply locking in Read and Write methods to prevent race conditions in concurrent usage of websocket connections. This enhances reliability in multi-threaded environments.

lemon-mint committed Oct 30, 2025 at 16:04 UTC e3b5802fdcf67019bef5f1a10e2454dc74b3b05e
1 file changed +7
portal/utils/wsstream/wsstream.go
+7
@@ -3,6 +3,7 @@ package wsstream
3 import (
4 "io"
5 "strings"
6 + "sync"
7
8 "github.com/gorilla/websocket"
9 )
@@ -10,9 +11,13 @@ import (
11 type WsStream struct {
12 Conn *websocket.Conn
13 currentReader io.Reader
14 + writeMu sync.Mutex
15 + readMu sync.Mutex
16 }
17
18 func (g *WsStream) Read(p []byte) (n int, err error) {
19 + g.readMu.Lock()
20 + defer g.readMu.Unlock()
21 if g.currentReader == nil {
22 _, reader, err := g.Conn.NextReader()
23 if err != nil {
@@ -35,6 +40,8 @@ func (g *WsStream) Read(p []byte) (n int, err error) {
40 }
41
42 func (g *WsStream) Write(p []byte) (n int, err error) {
43 + g.writeMu.Lock()
44 + defer g.writeMu.Unlock()
45 err = g.Conn.WriteMessage(websocket.BinaryMessage, p)
46 if err != nil {
47 if strings.HasPrefix(err.Error(), "websocket: close ") {