From 36125606b9ce3112e7ba4cac0cb5e97b6e77acc2 Mon Sep 17 00:00:00 2001 From: Sarah Brofeldt Date: Mon, 26 May 2025 15:13:04 +0200 Subject: [PATCH] metrics: spawn off each service fn Previously each connection would be handled one-by-one in the metrics accept loop, eventually causing socket leaks that would grind the metrics server to a halt. --- src/metrics.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/metrics.rs b/src/metrics.rs index 4046f9a..846507a 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -64,9 +64,11 @@ pub async fn serve(port: u16) -> Result<(), BoxedErr> { let (stream, _) = listener.accept().await?; let io = TokioIo::new(stream); - let service = service_fn(serve_req); - if let Err(err) = http1::Builder::new().serve_connection(io, service).await { - eprintln!("server error: {:?}", err); - }; + tokio::task::spawn(async move { + let service = service_fn(serve_req); + if let Err(err) = http1::Builder::new().serve_connection(io, service).await { + eprintln!("server error: {:?}", err); + }; + }); } }