diff --git a/src/server.rs b/src/server.rs index a852546..313b148 100644 --- a/src/server.rs +++ b/src/server.rs @@ -178,7 +178,7 @@ impl Server { tokio::select! { stream = frontend.accept() => { match stream { - Ok(s) => join_handles.push(self.clone().handle_frontend_stream(s, request_tx.clone())), + Ok(s) => join_handles.push(handle_frontend_stream(self.notifies.cancel.clone(), s, request_tx.clone())), Err(e) => log::warn!("error accepting frontend connection: {e}"), }; self.enumerate(); @@ -351,21 +351,6 @@ impl Server { false } - fn handle_frontend_stream( - self, - #[cfg(unix)] stream: ReadHalf, - #[cfg(windows)] stream: ReadHalf, - request_channel: Sender, - ) -> JoinHandle<()> { - let tx = request_channel.clone(); - tokio::task::spawn_local(async move { - tokio::select! { - _ = listen_frontend(tx, stream) => {}, - _ = self.cancelled() => {}, - } - }) - } - fn enumerate(&self) { let clients = self .client_manager @@ -563,3 +548,18 @@ async fn listen_frontend( } } } + +fn handle_frontend_stream( + cancel: CancellationToken, + #[cfg(unix)] stream: ReadHalf, + #[cfg(windows)] stream: ReadHalf, + request_channel: Sender, +) -> JoinHandle<()> { + let tx = request_channel.clone(); + tokio::task::spawn_local(async move { + tokio::select! { + _ = listen_frontend(tx, stream) => {}, + _ = cancel.cancelled() => {}, + } + }) +}