From fe3696e5576739d8b033d9e748b5ea696c4b4e4f Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Fri, 15 Nov 2024 16:44:10 +0000 Subject: [PATCH] refactor: use check_sub for sleep calculations --- src/docker_data/mod.rs | 5 +++-- src/main.rs | 12 ++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/docker_data/mod.rs b/src/docker_data/mod.rs index cc4101b..0e38c1c 100644 --- a/src/docker_data/mod.rs +++ b/src/docker_data/mod.rs @@ -416,9 +416,10 @@ impl DockerData { let mut now = std::time::Instant::now(); tokio::spawn(async move { loop { - let to_sleep = update_duration.saturating_sub(now.elapsed()); - tokio::time::sleep(to_sleep).await; docker_tx.send(DockerMessage::Update).await.ok(); + if let Some(to_sleep) = update_duration.checked_sub(now.elapsed()) { + tokio::time::sleep(to_sleep).await; + } now = std::time::Instant::now(); } }); diff --git a/src/main.rs b/src/main.rs index b13cd59..e11b334 100644 --- a/src/main.rs +++ b/src/main.rs @@ -124,6 +124,7 @@ async fn main() { Ui::create(app_data, gui_state, input_tx, is_running).await; } else { info!("in debug mode\n"); + let mut now = std::time::Instant::now(); // Debug mode for testing, less pointless now, will display some basic information while is_running.load(Ordering::SeqCst) { let err = app_data.lock().get_error(); @@ -131,10 +132,12 @@ async fn main() { error!("{}", err); process::exit(1); } - tokio::time::sleep(std::time::Duration::from_millis(u64::from( - args.docker_interval, - ))) - .await; + if let Some(Ok(to_sleep)) = u128::from(args.docker_interval) + .checked_sub(now.elapsed().as_millis()) + .map(u64::try_from) + { + tokio::time::sleep(std::time::Duration::from_millis(to_sleep)).await; + } let containers = app_data .lock() .get_container_items() @@ -148,6 +151,7 @@ async fn main() { } println!(); } + now = std::time::Instant::now(); } } }