diff --git a/cmd/sdrd/main.go b/cmd/sdrd/main.go index 7b0ab43..6fe957d 100644 --- a/cmd/sdrd/main.go +++ b/cmd/sdrd/main.go @@ -85,10 +85,18 @@ func (h *hub) remove(c *websocket.Conn) { func (h *hub) broadcast(frame SpectrumFrame) { h.mu.Lock() - defer h.mu.Unlock() - b, _ := json.Marshal(frame) + clients := make([]*websocket.Conn, 0, len(h.clients)) for c := range h.clients { - _ = c.WriteMessage(websocket.TextMessage, b) + clients = append(clients, c) + } + h.mu.Unlock() + + b, _ := json.Marshal(frame) + for _, c := range clients { + _ = c.SetWriteDeadline(time.Now().Add(200 * time.Millisecond)) + if err := c.WriteMessage(websocket.TextMessage, b); err != nil { + h.remove(c) + } } } diff --git a/internal/sdrplay/sdrplay.go b/internal/sdrplay/sdrplay.go index 2be60e8..3bf7dc7 100644 --- a/internal/sdrplay/sdrplay.go +++ b/internal/sdrplay/sdrplay.go @@ -385,6 +385,9 @@ func goStreamCallback(xi *C.short, xq *C.short, numSamples C.uint, reset C.uint, src.size = 0 src.resets++ src.mu.Unlock() + if src.cond != nil { + src.cond.Broadcast() + } } n := int(numSamples) if n <= 0 {