From 00092dc97b0af5ca54b69ba8a479478833473f62 Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Thu, 4 Sep 2025 11:48:38 -0700 Subject: [PATCH] deadlock less --- src/app/mod.rs | 25 +++++++++++++------------ src/http_server.rs | 2 ++ src/lib.rs | 18 +++++++++++------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 45716c9..5ef29fb 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -84,18 +84,6 @@ impl App { pub async fn handle_events(&mut self) -> Result<()> { tokio::select! { - terminal_event = self.terminal_events.next().fuse() => { - if let Some(Ok(evt)) = terminal_event { - match evt { - Event::Key(key) - if key.kind == KeyEventKind::Press - => self.handle_key_event(key, evt).await, - Event::Mouse(_) => {} - Event::Resize(_, _) => {} - _ => {} - } - } - } jocal_event = self.jocal_event_rx.recv().fuse() => { if let Some(event) = jocal_event { log::trace!("got JocalEvent {event:?}"); @@ -114,6 +102,19 @@ impl App { } } } + + terminal_event = self.terminal_events.next().fuse() => { + if let Some(Ok(evt)) = terminal_event { + match evt { + Event::Key(key) + if key.kind == KeyEventKind::Press + => self.handle_key_event(key, evt).await, + Event::Mouse(_) => {} + Event::Resize(_, _) => {} + _ => {} + } + } + } } Ok(()) diff --git a/src/http_server.rs b/src/http_server.rs index ab7aa5a..f203048 100644 --- a/src/http_server.rs +++ b/src/http_server.rs @@ -32,6 +32,8 @@ impl JocalService { log::info!("starting http server"); + // need to make a custom tls acceptor, see + // https://github.com/programatik29/axum-server/blob/master/examples/rustls_session.rs axum_server::bind_rustls(addr, ssl_config) .handle(handle) .serve(app.into_make_service_with_connect_info::()) diff --git a/src/lib.rs b/src/lib.rs index 1469468..9bba52c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -30,7 +30,7 @@ use transfer::Session; pub const DEFAULT_PORT: u16 = 53317; pub const MULTICAST_IP: Ipv4Addr = Ipv4Addr::new(224, 0, 0, 167); -pub const DEFAULT_INTERVAL: Duration = Duration::from_micros(33333); +pub const DEFAULT_INTERVAL: Duration = Duration::from_millis(100); pub type Peers = Arc>>; pub type Sessions = Arc>>; // Session ID to Session @@ -178,22 +178,26 @@ impl JocalService { let service = self.clone(); handles.spawn(async move { loop { + if let Err(e) = service.announce(None).await { + error!("Announcement error: {e}"); + } + + tokio::time::sleep(Duration::from_secs(2)).await; + let rstate = service.running_state.lock().await; if *rstate == RunningState::Stopping { break; } - if let Err(e) = service.announce(None).await { - error!("Announcement error: {e}"); - } - tokio::time::sleep(Duration::from_secs(2)).await; } JocalTasks::Udp }); } pub async fn stop(&self) { - let mut rstate = self.running_state.lock().await; - *rstate = RunningState::Stopping; + { + let mut rstate = self.running_state.lock().await; + *rstate = RunningState::Stopping; + } log::info!("shutting down http server"); self.http_handle .get()