server: use select! for run

This commit is contained in:
Luna Yao
2026-04-06 11:54:02 +02:00
parent 0c8da66a74
commit 238858ebab
+36 -30
View File
@@ -225,40 +225,46 @@ impl DnsServer {
let dirty = &self.mgr.dirty; let dirty = &self.mgr.dirty;
let mut runtime = None; let mut runtime = None;
tokio::join!( let reload_catalog = async {
async { loop {
loop { dirty.catalog.notified().await;
dirty.catalog.notified().await; if dirty.catalog.reset() {
if dirty.catalog.reset() { self.catalog.replace(self.mgr.catalog()).await;
self.catalog.replace(self.mgr.catalog()).await;
}
tokio::time::sleep(Duration::from_secs(1)).await;
} }
}, tokio::time::sleep(Duration::from_secs(1)).await;
async { }
loop { };
dirty.addresses.notified().await;
if dirty.addresses.reset() { let reload_addresses = async {
self.reload_addresses(self.mgr.iter_addresses()).await; loop {
} dirty.addresses.notified().await;
tokio::time::sleep(Duration::from_secs(1)).await; if dirty.addresses.reset() {
self.reload_addresses(self.mgr.iter_addresses()).await;
} }
}, tokio::time::sleep(Duration::from_secs(1)).await;
async { }
loop { };
dirty.listeners.notified().await;
if dirty.listeners.reset() { let reload_listeners = async {
if let Err(e) = self loop {
.reload_listeners(self.mgr.iter_listeners(), &mut runtime) dirty.listeners.notified().await;
.await if dirty.listeners.reset() {
{ if let Err(e) = self
tracing::error!("failed to reload listeners: {:?}", e); .reload_listeners(self.mgr.iter_listeners(), &mut runtime)
dirty.listeners.mark(); .await
} {
tracing::error!("failed to reload listeners: {:?}", e);
dirty.listeners.mark();
} }
tokio::time::sleep(Duration::from_secs(1)).await;
} }
}, tokio::time::sleep(Duration::from_secs(1)).await;
}
};
tokio::select!(
_ = reload_catalog => {},
_ = reload_addresses => {},
_ = reload_listeners => {},
); );
self.reload_addresses(iter::empty()).await; self.reload_addresses(iter::empty()).await;