From ecd3e4d016c8d8187a54bac955a206da8232fa23 Mon Sep 17 00:00:00 2001 From: Jan Svabenik Date: Tue, 17 Mar 2026 21:15:58 +0100 Subject: [PATCH] Fix SDRplay init/stop leaks and stats endpoint --- cmd/sdrd/main.go | 6 +----- internal/sdrplay/sdrplay.go | 7 ++++++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd/sdrd/main.go b/cmd/sdrd/main.go index 6fe957d..6832e9b 100644 --- a/cmd/sdrd/main.go +++ b/cmd/sdrd/main.go @@ -389,11 +389,7 @@ func main() { http.HandleFunc("/api/stats", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - if sp, ok := src.(sdr.StatsProvider); ok { - _ = json.NewEncoder(w).Encode(sp.Stats()) - return - } - _ = json.NewEncoder(w).Encode(sdr.SourceStats{}) + _ = json.NewEncoder(w).Encode(srcMgr.Stats()) }) http.HandleFunc("/api/gpu", func(w http.ResponseWriter, r *http.Request) { diff --git a/internal/sdrplay/sdrplay.go b/internal/sdrplay/sdrplay.go index 3bf7dc7..13f69e2 100644 --- a/internal/sdrplay/sdrplay.go +++ b/internal/sdrplay/sdrplay.go @@ -112,7 +112,12 @@ func New(sampleRate int, centerHz float64, gainDb float64, bwKHz int) (sdr.Sourc s.cond = sync.NewCond(&s.mu) s.resizeBuffer(sampleRate, 0) s.handle = cgo.NewHandle(s) - return s, s.configure(sampleRate, centerHz, gainDb, bwKHz) + if err := s.configure(sampleRate, centerHz, gainDb, bwKHz); err != nil { + s.handle.Delete() + s.handle = 0 + return nil, err + } + return s, nil } func (s *Source) configure(sampleRate int, centerHz float64, gainDb float64, bwKHz int) error {