fix: fixing deadlock caused by read mutex

This commit is contained in:
2025-09-29 16:38:08 +07:00
parent 66b27082b9
commit 1537e58444

View File

@@ -253,30 +253,28 @@ func (wsClient *SafeWebsocketClient) startReceiveHandler(ctx context.Context) {
log.Println("receive handler stopped")
return
default:
if err := wsClient.mu.ReadHandler(func() error {
conn := wsClient.conn
conn := wsClient.conn
if conn == nil {
wsClient.triggerReconnect()
return fmt.Errorf("connection closed")
}
_, message, err := conn.ReadMessage()
if err != nil {
wsClient.triggerReconnect()
return fmt.Errorf("failed to read message: %v", err)
}
select {
case wsClient.dataChannel <- message:
case <-ctx.Done():
log.Println("Reconnect handler stopped")
return nil
default:
log.Println("Data channel full, dropping message")
}
return nil
}); err != nil {
if conn == nil {
wsClient.triggerReconnect()
return
// return fmt.Errorf("connection closed")
}
_, message, err := conn.ReadMessage()
if err != nil {
wsClient.triggerReconnect()
// return fmt.Errorf("failed to read message: %v", err)
return
}
select {
case wsClient.dataChannel <- message:
case <-ctx.Done():
log.Println("Reconnect handler stopped")
return
default:
log.Println("Data channel full, dropping message")
}
return
}
}
}