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