diff --git a/chirpstack/src/api/internal.rs b/chirpstack/src/api/internal.rs index 1cf5e1c6..32527b0f 100644 --- a/chirpstack/src/api/internal.rs +++ b/chirpstack/src/api/internal.rs @@ -675,6 +675,7 @@ impl InternalService for Internal { // detect client disconnect _ = close_rx.recv() => { debug!("Client disconnected"); + redis_rx.close(); break; } // detect get_frame_logs function return diff --git a/chirpstack/src/framelog.rs b/chirpstack/src/framelog.rs index 04aaa32a..97eff9b6 100644 --- a/chirpstack/src/framelog.rs +++ b/chirpstack/src/framelog.rs @@ -9,7 +9,7 @@ use redis::streams::StreamReadReply; use serde_json::json; use tokio::sync::mpsc; use tokio::task; -use tracing::{error, trace}; +use tracing::{debug, error, trace}; use lrwn::EUI64; @@ -256,6 +256,11 @@ pub async fn get_frame_logs( let mut c = get_redis_conn()?; loop { + if channel.is_closed() { + debug!("Channel has been closed, returning"); + return Ok(()); + } + let srr: StreamReadReply = redis::cmd("XREAD") .arg("COUNT") .arg(count) @@ -362,6 +367,7 @@ pub async fn get_frame_logs( // check every 1 second if there are new messages, which should be sufficient. sleep(Duration::from_secs(1)); } + } }).await? }