diff --git a/src/router/serve/unix.rs b/src/router/serve/unix.rs index bee3c8c7..f5018455 100644 --- a/src/router/serve/unix.rs +++ b/src/router/serve/unix.rs @@ -43,7 +43,7 @@ pub(super) async fn serve( let app = app.into_make_service_with_connect_info::(); let builder = server::conn::auto::Builder::new(executor); let listener = init(server).await?; - loop { + while server.running() { let app = app.clone(); let builder = builder.clone(); tokio::select! { diff --git a/src/service/resolver/actual.rs b/src/service/resolver/actual.rs index 3f609b95..0506be2c 100644 --- a/src/service/resolver/actual.rs +++ b/src/service/resolver/actual.rs @@ -232,11 +232,12 @@ impl super::Service { #[tracing::instrument(skip_all, name = "well-known")] async fn request_well_known(&self, dest: &str) -> Result> { - trace!("Requesting well known for {dest}"); if !self.has_cached_override(dest) { self.query_and_cache_override(dest, dest, 8448).await?; } + self.services.server.check_running()?; + trace!("Requesting well known for {dest}"); let response = self .services .client @@ -304,6 +305,9 @@ impl super::Service { hostname: &'_ str, port: u16, ) -> Result<()> { + self.services.server.check_running()?; + + debug!("querying IP for {overname:?} ({hostname:?}:{port})"); match self.resolver.resolver.lookup_ip(hostname.to_owned()).await { | Err(e) => Self::handle_resolve_error(&e, hostname), | Ok(override_ip) => { @@ -328,6 +332,8 @@ impl super::Service { [format!("_matrix-fed._tcp.{hostname}."), format!("_matrix._tcp.{hostname}.")]; for hostname in hostnames { + self.services.server.check_running()?; + debug!("querying SRV for {hostname:?}"); let hostname = hostname.trim_end_matches('.'); match self.resolver.resolver.srv_lookup(hostname).await { diff --git a/src/service/sending/send.rs b/src/service/sending/send.rs index 3d13a3b0..e2981068 100644 --- a/src/service/sending/send.rs +++ b/src/service/sending/send.rs @@ -93,6 +93,7 @@ impl super::Service { let request = Request::try_from(request)?; self.validate_url(request.url())?; + self.server.check_running()?; Ok(request) } diff --git a/src/service/sending/sender.rs b/src/service/sending/sender.rs index 4e806ce8..339236a5 100644 --- a/src/service/sending/sender.rs +++ b/src/service/sending/sender.rs @@ -105,7 +105,8 @@ impl Service { .get(id) .map(|(_, receiver)| receiver.clone()) .expect("Missing channel for sender worker"); - loop { + + while !receiver.is_closed() { tokio::select! { Some(response) = futures.next() => { self.handle_response(response, futures, statuses).await;