From fc954fd27c1f2f9b622dbbd2f375891bb9f4049e Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Fri, 13 Mar 2026 11:28:41 +0100 Subject: [PATCH] [fix](trx-frontend-http): stop headless background spectrum polling Co-authored-by: OpenAI Codex Signed-off-by: Stan Grams --- .../src/background_decode.rs | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs index c4c4083..49b0d3d 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs @@ -486,13 +486,29 @@ impl BackgroundDecodeManager { async fn run(self: Arc) { let mut runtime = BackgroundRuntimeState::default(); let mut notify_rx = self.notify_tx.subscribe(); - let mut spectrum_rx = self.context.spectrum.subscribe(); + let mut spectrum_rx: Option> = None; let mut interval = time::interval(Duration::from_secs(2)); loop { - self.reconcile(&mut runtime, &spectrum_rx.borrow().clone()); + let users_connected = self.context.sse_clients.load(Ordering::Relaxed) > 0; + if users_connected && spectrum_rx.is_none() { + spectrum_rx = Some(self.context.spectrum.subscribe()); + } else if !users_connected { + spectrum_rx = None; + } + + let spectrum = spectrum_rx + .as_ref() + .map(|rx| rx.borrow().clone()) + .unwrap_or_default(); + self.reconcile(&mut runtime, &spectrum); tokio::select! { - changed = spectrum_rx.changed() => { + changed = async { + match spectrum_rx.as_mut() { + Some(rx) => rx.changed().await.map_err(|_| ()), + None => std::future::pending::>().await, + } + } => { if changed.is_err() { warn!("background decode: spectrum watch closed"); self.clear_runtime_channels(&mut runtime);