Pārlūkot izejas kodu

Fix SDRplay stop deadlock and websocket backpressure

master
Jan Svabenik pirms 4 dienas
vecāks
revīzija
fe6e9e3036
2 mainītis faili ar 14 papildinājumiem un 3 dzēšanām
  1. +11
    -3
      cmd/sdrd/main.go
  2. +3
    -0
      internal/sdrplay/sdrplay.go

+ 11
- 3
cmd/sdrd/main.go Parādīt failu

@@ -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)
}
}
}



+ 3
- 0
internal/sdrplay/sdrplay.go Parādīt failu

@@ -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 {


Notiek ielāde…
Atcelt
Saglabāt