fix: data race hotfix

This commit is contained in:
2025-09-25 07:24:57 +07:00
parent 34811d4132
commit 6b58b7f233
2 changed files with 28 additions and 21 deletions

View File

@@ -122,14 +122,6 @@ func WritePump(c *Client, h *Hub) {
c.Conn.Close()
}()
c.Conn.SetReadLimit(1024)
c.Conn.SetPongHandler(func(string) error {
if err := c.Conn.WriteMessage(websocket.PongMessage, []byte{}); err != nil {
return fmt.Errorf("failed to send pong: %v", err)
}
return nil
})
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
@@ -142,19 +134,13 @@ func WritePump(c *Client, h *Hub) {
return fmt.Errorf("message not ok")
}
w, err := c.Conn.NextWriter(websocket.TextMessage)
if err != nil {
return fmt.Errorf("failed to get writer: %q", err)
}
w.Write(message)
if err := w.Close(); err != nil {
if err := c.Conn.WriteMessage(websocket.TextMessage, message); err != nil {
return err
}
return nil
}); err == nil {
continue
}); err != nil {
return
}
case <-ticker.C:
if err := c.mu.WriteHandler(func() error {
@@ -172,8 +158,28 @@ func WritePump(c *Client, h *Hub) {
func ReadPump(c *Client) {
go func() {
defer func() {
c.Conn.Close()
}()
c.Conn.SetReadLimit(1024)
c.Conn.SetPongHandler(func(string) error {
return c.mu.WriteHandler(func() error {
if err := c.Conn.WriteMessage(websocket.PongMessage, []byte{}); err != nil {
return fmt.Errorf("failed to send pong: %v", err)
}
return nil
})
})
for {
_, message, err := c.Conn.ReadMessage()
var messageType int
var message []byte
var err error
// c.mu.ReadHandler(func() error {
messageType, message, err = c.Conn.ReadMessage()
// return nil
// })
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Printf("WebSocket error: %v", err)
@@ -181,7 +187,9 @@ func ReadPump(c *Client) {
break
}
fmt.Println(string(message))
if messageType == websocket.TextMessage {
fmt.Printf("Received: %s\n", message)
}
}
}()