From 8043a5001cee0d7e44ff7e58d9f60be82fb9ac03 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Fri, 13 Mar 2026 08:09:16 +0100 Subject: [PATCH] [fix](trx-server): move remaining decoders off async workers Co-authored-by: OpenAI Codex Signed-off-by: Stan Grams --- src/trx-server/src/audio.rs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/trx-server/src/audio.rs b/src/trx-server/src/audio.rs index a92a420..0e68dce 100644 --- a/src/trx-server/src/audio.rs +++ b/src/trx-server/src/audio.rs @@ -950,7 +950,8 @@ pub async fn run_aprs_decoder( apply_decode_audio_gate(&mut mono); was_active = true; - for mut pkt in decoder.process_samples(&mono) { + let packets = tokio::task::block_in_place(|| decoder.process_samples(&mono)); + for mut pkt in packets { if let Some(logger) = decode_logs.as_ref() { logger.log_aprs(&pkt); } @@ -1045,7 +1046,8 @@ pub async fn run_hf_aprs_decoder( apply_decode_audio_gate(&mut mono); was_active = true; - for mut pkt in decoder.process_samples(&mono) { + let packets = tokio::task::block_in_place(|| decoder.process_samples(&mono)); + for mut pkt in packets { if let Some(logger) = decode_logs.as_ref() { logger.log_aprs(&pkt); } @@ -1143,7 +1145,10 @@ pub async fn run_ais_decoder( match recv { Ok(frame) => { was_active = true; - for mut msg in decoder_a.process_samples(&downmix_if_needed(frame, channels), "A") { + let mono = downmix_if_needed(frame, channels); + let messages = + tokio::task::block_in_place(|| decoder_a.process_samples(&mono, "A")); + for mut msg in messages { if msg.ts_ms.is_none() { msg.ts_ms = Some(current_timestamp_ms()); } @@ -1161,7 +1166,10 @@ pub async fn run_ais_decoder( match recv { Ok(frame) => { was_active = true; - for mut msg in decoder_b.process_samples(&downmix_if_needed(frame, channels), "B") { + let mono = downmix_if_needed(frame, channels); + let messages = + tokio::task::block_in_place(|| decoder_b.process_samples(&mono, "B")); + for mut msg in messages { if msg.ts_ms.is_none() { msg.ts_ms = Some(current_timestamp_ms()); } @@ -1233,7 +1241,9 @@ pub async fn run_vdes_decoder( match recv { Ok(block) => { was_active = true; - for mut msg in decoder.process_samples(&block, "Main") { + let messages = + tokio::task::block_in_place(|| decoder.process_samples(&block, "Main")); + for mut msg in messages { if msg.ts_ms.is_none() { msg.ts_ms = Some(current_timestamp_ms()); } @@ -1368,7 +1378,8 @@ pub async fn run_cw_decoder( frame }; was_active = true; - for evt in decoder.process_samples(&mono) { + let events = tokio::task::block_in_place(|| decoder.process_samples(&mono)); + for evt in events { if let Some(logger) = decode_logs.as_ref() { logger.log_cw(&evt); }