Compare commits

...

1 Commits

Author SHA1 Message Date
1537e58444 fix: fixing deadlock caused by read mutex 2025-09-29 16:38:08 +07:00

View File

@@ -253,30 +253,28 @@ 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() }
if err != nil { _, message, err := conn.ReadMessage()
wsClient.triggerReconnect() if err != nil {
return fmt.Errorf("failed to read message: %v", err) 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 {
return return
} }
select {
case wsClient.dataChannel <- message:
case <-ctx.Done():
log.Println("Reconnect handler stopped")
return
default:
log.Println("Data channel full, dropping message")
}
return
} }
} }
} }