Просмотр исходного кода

Fix SDRplay stop deadlock and websocket backpressure

master
Jan Svabenik 4 дней назад
Родитель
Сommit
fe6e9e3036
2 измененных файлов: 14 добавлений и 3 удалений
  1. +11
    -3
      cmd/sdrd/main.go
  2. +3
    -0
      internal/sdrplay/sdrplay.go

+ 11
- 3
cmd/sdrd/main.go Просмотреть файл

@@ -85,10 +85,18 @@ func (h *hub) remove(c *websocket.Conn) {


func (h *hub) broadcast(frame SpectrumFrame) { func (h *hub) broadcast(frame SpectrumFrame) {
h.mu.Lock() h.mu.Lock()
defer h.mu.Unlock()
b, _ := json.Marshal(frame)
clients := make([]*websocket.Conn, 0, len(h.clients))
for c := range 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)
}
} }
} }




+ 3
- 0
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.size = 0
src.resets++ src.resets++
src.mu.Unlock() src.mu.Unlock()
if src.cond != nil {
src.cond.Broadcast()
}
} }
n := int(numSamples) n := int(numSamples)
if n <= 0 { if n <= 0 {


Загрузка…
Отмена
Сохранить