From 38e7366c15724f0fd33f9277551fbc938290e550 Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Mon, 27 Apr 2026 17:22:30 +0200 Subject: [PATCH] merge --- easytier/src/dns/node.rs | 5 +++-- easytier/src/dns/server.rs | 10 ++++++---- easytier/src/instance/instance.rs | 14 +++++++------- easytier/src/utils/dns.rs | 3 +-- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/easytier/src/dns/node.rs b/easytier/src/dns/node.rs index ac2e91d8..eddf0b38 100644 --- a/easytier/src/dns/node.rs +++ b/easytier/src/dns/node.rs @@ -13,6 +13,7 @@ use crate::proto::rpc_impl::standalone::{StandAloneClient, StandAloneServer}; use crate::proto::rpc_types::controller::BaseController; use crate::tunnel::tcp::{TcpTunnelConnector, TcpTunnelListener}; use crate::utils::task::CancellableTask; +use std::io; use std::sync::Arc; use tokio::sync::{Notify, broadcast}; use tokio::task::{JoinError, JoinSet}; @@ -215,7 +216,7 @@ impl DnsNodeRuntime { #[derive(Debug)] pub struct DnsNode { runtime: DnsNodeRuntime, - task: CancellableTask, + task: CancellableTask<()>, } impl DnsNode { @@ -244,7 +245,7 @@ impl DnsNode { Self { runtime, task } } - pub async fn stop(self) -> Result<(), JoinError> { + pub async fn stop(self) -> io::Result<()> { self.task.stop(None).await } } diff --git a/easytier/src/dns/server.rs b/easytier/src/dns/server.rs index f6553fd6..63845b52 100644 --- a/easytier/src/dns/server.rs +++ b/easytier/src/dns/server.rs @@ -169,7 +169,7 @@ impl DnsServer { async fn reload_listeners( &self, listeners: impl IntoIterator, - runtime: &mut Option, + runtime: &mut Option>, ) -> anyhow::Result<()> { let listeners = listeners.into_iter().collect(); @@ -204,8 +204,8 @@ impl DnsServer { } } - *runtime = Some(CancellableTask::with_token( - server.shutdown_token().clone(), + let token = server.shutdown_token().clone(); + let handle = tokio::spawn( async move { server .block_until_done() @@ -213,7 +213,9 @@ impl DnsServer { .unwrap_or_else(|e| tracing::error!("DNS server exited with error: {:?}", e)); } .instrument(tracing::info_span!("DNS server backend runtime")), - )); + ); + + *runtime = Some(CancellableTask::with_handle(token, handle)); *self.listeners.write() = listeners; diff --git a/easytier/src/instance/instance.rs b/easytier/src/instance/instance.rs index c02a65e2..59a98646 100644 --- a/easytier/src/instance/instance.rs +++ b/easytier/src/instance/instance.rs @@ -7,13 +7,6 @@ use std::sync::{Arc, Weak}; #[cfg(feature = "tun")] use std::time::Duration; -use anyhow::Context; -use cidr::{IpCidr, Ipv4Inet}; -use futures::FutureExt; -use tokio::sync::{Mutex, Notify}; -#[cfg(feature = "tun")] -use tokio::{sync::oneshot, task::JoinSet}; - use crate::common::PeerId; use crate::common::acl_processor::AclRuleBuilder; use crate::common::config::ConfigLoader; @@ -59,6 +52,13 @@ use crate::proto::rpc_types::controller::BaseController; use crate::rpc_service::InstanceRpcService; use crate::utils::weak_upgrade; use crate::vpn_portal::{self, VpnPortal}; +use anyhow::Context; +use cidr::{IpCidr, Ipv4Inet}; +use futures::FutureExt; +use tokio::sync::{Mutex, Notify}; +#[cfg(feature = "tun")] +use tokio::{sync::oneshot, task::JoinSet}; +use tokio_util::task::AbortOnDropHandle; use super::listeners::ListenerManager; use super::public_ipv6_provider::{ diff --git a/easytier/src/utils/dns.rs b/easytier/src/utils/dns.rs index 81c37572..c2e5c18e 100644 --- a/easytier/src/utils/dns.rs +++ b/easytier/src/utils/dns.rs @@ -190,9 +190,8 @@ pub async fn socket_addrs( #[cfg(test)] mod tests { - use crate::defer; - use super::*; + use guarden::defer; #[test] fn parse_matrix_cases() {