Skip to content

Commit 67e6283

Browse files
committed
fix: add mutex to WebSocketManager to prevent race conditions
1 parent 92e7af2 commit 67e6283

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

cli/main.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ type WebSocketManager struct {
7171
writeChan chan []byte
7272
closeChan chan struct{}
7373
wg sync.WaitGroup
74+
mu sync.Mutex
7475
}
7576

7677
func NewWebSocketManager(conn *websocket.Conn) *WebSocketManager {
@@ -92,7 +93,9 @@ func (wsm *WebSocketManager) writerLoop() {
9293
for {
9394
select {
9495
case message := <-wsm.writeChan:
96+
wsm.mu.Lock()
9597
err := wsm.conn.WriteMessage(websocket.TextMessage, message)
98+
wsm.mu.Unlock()
9699
if err != nil {
97100
printError("WebSocket error: " + err.Error())
98101
return
@@ -111,10 +114,14 @@ func (wsm *WebSocketManager) Write(message []byte) {
111114
}
112115

113116
func (wsm *WebSocketManager) WritePing() error {
117+
wsm.mu.Lock()
118+
defer wsm.mu.Unlock()
114119
return wsm.conn.WriteMessage(websocket.PingMessage, []byte("ping"))
115120
}
116121

117122
func (wsm *WebSocketManager) WriteClose(closeCode int, text string) error {
123+
wsm.mu.Lock()
124+
defer wsm.mu.Unlock()
118125
return wsm.conn.WriteMessage(websocket.CloseMessage,
119126
websocket.FormatCloseMessage(closeCode, text))
120127
}

0 commit comments

Comments
 (0)