From 888044f63dc0af9a84ea8755c4951a12fb722c11 Mon Sep 17 00:00:00 2001 From: Toshit Chawda Date: Thu, 26 Sep 2024 18:22:28 -0700 Subject: [PATCH] immediately close ping task instead of waiting for the interval --- server/src/handle/wisp/mod.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/src/handle/wisp/mod.rs b/server/src/handle/wisp/mod.rs index 2e28fce..f5d038d 100644 --- a/server/src/handle/wisp/mod.rs +++ b/server/src/handle/wisp/mod.rs @@ -258,10 +258,14 @@ pub async fn handle_wisp(stream: WispResult, id: String) -> anyhow::Result<()> { }))); let ping_mux = mux.clone(); + let ping_event = event.clone(); set.spawn(async move { let mut interval = interval(Duration::from_secs(30)); while ping_mux.send_ping(Payload::Bytes(BytesMut::new())).await.is_ok() { - interval.tick().await; + select! { + _ = interval.tick() => (), + _ = ping_event.listen() => break, + }; } }); @@ -281,6 +285,8 @@ pub async fn handle_wisp(stream: WispResult, id: String) -> anyhow::Result<()> { let _ = mux.close().await; event.notify(usize::MAX); + trace!("waiting for tasks to close for wisp client id {:?}", id); + while set.join_next().await.is_some() {} debug!("wisp client id {:?} disconnected", id);