From 4e5910471ba8c220eb15cf419f231339155d49c8 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 24 Sep 2025 07:07:08 +0000 Subject: [PATCH] Require stronger ordering to sample final counter values on shutdown. Signed-off-by: Jason Volk --- src/router/serve/plain.rs | 23 +++++++++++------------ src/router/serve/tls.rs | 9 +++++---- src/router/serve/unix.rs | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/router/serve/plain.rs b/src/router/serve/plain.rs index 1b604c53..96ed60ae 100644 --- a/src/router/serve/plain.rs +++ b/src/router/serve/plain.rs @@ -10,19 +10,17 @@ use tuwunel_core::{Result, Server, debug_info, info}; pub(super) async fn serve( server: &Arc, - app: Router, + router: Router, handle: ServerHandle, addrs: Vec, ) -> Result { - let app = app.into_make_service_with_connect_info::(); let mut join_set = JoinSet::new(); + let router = router.into_make_service_with_connect_info::(); for addr in &addrs { - join_set.spawn_on( - bind(*addr) - .handle(handle.clone()) - .serve(app.clone()), - server.runtime(), - ); + let bound = bind(*addr); + let handler = bound.handle(handle.clone()); + let acceptor = handler.serve(router.clone()); + join_set.spawn_on(acceptor, server.runtime()); } info!("Listening on {addrs:?}"); @@ -31,21 +29,22 @@ pub(super) async fn serve( let handle_active = server .metrics .requests_handle_active - .load(Ordering::Relaxed); + .load(Ordering::Acquire); + debug_info!( handle_finished = server .metrics .requests_handle_finished - .load(Ordering::Relaxed), + .load(Ordering::Acquire), panics = server .metrics .requests_panic - .load(Ordering::Relaxed), + .load(Ordering::Acquire), handle_active, "Stopped listening on {addrs:?}", ); - debug_assert!(handle_active == 0, "active request handles still pending"); + debug_assert_eq!(0, handle_active, "active request handles still pending"); Ok(()) } diff --git a/src/router/serve/tls.rs b/src/router/serve/tls.rs index 6be5ce6e..44d4262f 100644 --- a/src/router/serve/tls.rs +++ b/src/router/serve/tls.rs @@ -79,21 +79,22 @@ pub(super) async fn serve( let handle_active = server .metrics .requests_handle_active - .load(Ordering::Relaxed); + .load(Ordering::Acquire); + debug_info!( handle_finished = server .metrics .requests_handle_finished - .load(Ordering::Relaxed), + .load(Ordering::Acquire), panics = server .metrics .requests_panic - .load(Ordering::Relaxed), + .load(Ordering::Acquire), handle_active, "Stopped listening on {addrs:?}", ); - debug_assert!(handle_active == 0, "active request handles still pending"); + debug_assert_eq!(0, handle_active, "active request handles still pending"); Ok(()) } diff --git a/src/router/serve/unix.rs b/src/router/serve/unix.rs index ed5efba5..5e363779 100644 --- a/src/router/serve/unix.rs +++ b/src/router/serve/unix.rs @@ -162,7 +162,7 @@ async fn fini(server: &Arc, listener: UnixListener, mut tasks: JoinSet<( while server .metrics .requests_handle_active - .load(Ordering::Relaxed) + .load(Ordering::Acquire) .gt(&0) { tokio::select! {