From a01f114a641121c77ab80fe43b0f3770458f3afc Mon Sep 17 00:00:00 2001 From: Jomar Milan Date: Sun, 7 Jun 2026 23:40:15 -0700 Subject: Use RwLock for sessions in app state --- src/main.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index b157b71..a09dd84 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ use axum::{Json, Router}; use rust_embed::Embed; use std::collections::HashMap; use std::net::SocketAddr; -use std::sync::{Arc, Mutex}; +use std::sync::{Arc, Mutex, RwLock}; use std::time::{SystemTime, UNIX_EPOCH}; #[derive(Embed)] @@ -22,13 +22,13 @@ use std::time::{SystemTime, UNIX_EPOCH}; struct EmbedAsset; struct AppState { - sessions: Mutex>, + sessions: RwLock>, } impl AppState { fn new() -> Self { AppState { - sessions: Mutex::new(HashMap::new()), + sessions: RwLock::new(HashMap::new()), } } } @@ -59,7 +59,7 @@ fn serve_template(template: impl Template) -> Response { } async fn serve_index(State(state): State>) -> Response { - let sessions = state.sessions.lock().unwrap(); + let sessions = state.sessions.read().unwrap(); serve_template(IndexTemplate { sessions: &sessions, }) @@ -85,7 +85,7 @@ async fn visit_session( ) -> Response { let passcode = query.get("passcode"); - let sessions = state.sessions.lock().unwrap(); + let sessions = state.sessions.read().unwrap(); match sessions.get(&id) { Some(session) => match passcode { @@ -110,7 +110,7 @@ async fn create_session( .unwrap_or(675603000) .to_string(); - let mut sessions = state.sessions.lock().unwrap(); + let mut sessions = state.sessions.write().unwrap(); let session = Session::new(name, passcode.clone()); sessions.insert(id, session); @@ -119,7 +119,7 @@ async fn create_session( } async fn serve_hands(Path(id): Path, State(state): State>) -> Response { - let sessions = state.sessions.lock().unwrap(); + let sessions = state.sessions.read().unwrap(); match sessions.get(&id) { Some(session) => Json(session.hands.keys().collect::>()).into_response(), @@ -132,7 +132,7 @@ async fn update_hands( State(state): State>, Json(payload): Json>>, ) -> Response { - let mut sessions = state.sessions.lock().unwrap(); + let mut sessions = state.sessions.write().unwrap(); match sessions.get_mut(&id) { Some(session) => { -- cgit v1.2.3