Follow-up admin/dongle fix for the Rust backend (serverrs). Wire protocol, REST API and config format are unchanged.
Fix: rtl_tcp → local switch still returning proxy 502
2.11.4 moved the blocking USB open off the tokio workers, but start_dongle still built the rustfft plan and, more importantly, pre-allocated and zeroed the 1024-frame waterfall history (32 MB at 8192 bins) on an async worker. On a small host that is enough to stall request handling during reinit and let a reverse proxy return its HTML 502 page, even though the process stays healthy.
Changes in 2.11.5:
- The whole DSP/history setup for a (re)started dongle now runs under
tokio::task::spawn_blocking: FFT plan, deflate encoders, and the 32 MB history pre-allocation. - Reinit logs
elapsed_msand success/failure (dongle reinit finished). - The admin UI retries
/api/admin/sessionon transient 5xx/network errors, so a proxy 502 during reinit no longer clears the login state. - The admin UI retries
/api/admin/donglesfor up to ~4.5 s after a save.
Verified with a fake rtl_tcp feed: PUT returns 200, the immediate dongle-list GETs return 200 in under 1 ms, and the local source opens in ~441 ms with the HTTP API responsive throughout.
Tests
cargo test: 115/115. Client typecheck and production build are clean.
Docker
ghcr.io/gbozo/no-sdr:2.11.5-rust — multi-arch (linux/amd64 + linux/arm64), -rust suffix only.