From d589d8bac2645058b36a7e779b25d3b164fa4595 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:56:56 +0200 Subject: [PATCH] improve loop management (#1047) * improve loop management * more --- src/ui/netplay.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 8d11a7db..61f0ee96 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -111,7 +111,6 @@ fn setup_create_window( let weak = app.as_weak(); app.on_netplay_create_session( move |session_name, player_name, game_name, game_hash, game_cheats, password| { - let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( netplay_read_sender.clone(), netplay_write_receiver.resubscribe(), @@ -394,9 +393,6 @@ fn update_ping( let mut write_clone = write.clone(); tokio::spawn(async move { loop { - if close_ping_rx.try_recv().is_ok() { - break; - } socket.update_peers(); for peer in socket.connected_peers() { let now = std::time::SystemTime::now() @@ -410,7 +406,22 @@ fn update_ping( let data = postcard::to_stdvec(&ping_message).unwrap(); let _ = write.send((peer, data.into())).await; } - tokio::time::sleep(std::time::Duration::from_secs(1)).await; + tokio::select! { + result = close_ping_rx.recv() => { + match result { + Ok(()) => { + break; + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("close_ping_rx lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; + } + } + } + _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => {} + } } socket.close(); }); @@ -626,7 +637,6 @@ fn setup_join_window( netplay_write_receiver: tokio::sync::broadcast::Receiver>, close_ping_rx: tokio::sync::broadcast::Receiver<()>, ) { - let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( netplay_read_sender.clone(), netplay_write_receiver.resubscribe(),