소스 검색

Fix SDRplay stop deadlock and websocket backpressure

master
Jan Svabenik 4 일 전
부모
커밋
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) {
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 파일 보기

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


불러오는 중...
취소
저장