From 0a76f0ed21af9af5efbd1a637821d7f73ed5502b Mon Sep 17 00:00:00 2001 From: Serguey Parkhomovsky Date: Sat, 21 Mar 2026 12:21:10 -0700 Subject: Use RwLock instead of Mutex --- src/main.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7d609c2..ac9b3b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,12 +8,12 @@ use std::collections::HashMap; use std::fs; use std::process; use std::sync::Arc; -use std::sync::Mutex; +use std::sync::RwLock; use std::time::Duration; use tokio::task::{Id, JoinSet}; use tracing::{debug, error, info, warn}; -type StateMap = Arc>>; +type StateMap = Arc>>; #[derive(Parser, Debug)] #[command(about = "Print statistics scraper")] @@ -40,7 +40,7 @@ async fn main() { error!(path = %args.config, error = %e, "Failed to parse config file"); process::exit(1); }); - let state: StateMap = Arc::new(Mutex::new(HashMap::new())); + let state: StateMap = Arc::new(RwLock::new(HashMap::new())); let mut tasks = JoinSet::new(); let mut task_names: HashMap = HashMap::new(); @@ -119,7 +119,7 @@ async fn fetch_prusa( .await? .json::() .await?; - let mut lock = state.lock().unwrap(); + let mut lock = state.write().unwrap(); lock.entry(name.to_owned()) .or_default() .update_from(&response); @@ -203,7 +203,7 @@ async fn poll_bambu( debug!(payload = ?p.payload, "Received Bambu payload"); match serde_json::from_slice::(&p.payload) { Ok(msg) => { - let mut lock = state.lock().unwrap(); + let mut lock = state.write().unwrap(); lock.entry(name.clone()).or_default().update_from(&msg); debug!(name, payload = ?p.payload, "Updated state"); } @@ -220,5 +220,5 @@ async fn poll_bambu( } async fn root(State(state): State) -> Json> { - Json(state.lock().unwrap().clone()) + Json(state.read().unwrap().clone()) } -- cgit v1.2.3