From 39c595b5e9fa0d5c75a35aa180d7a8c32aecf1ed Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Sun, 5 Apr 2026 23:47:30 +0200 Subject: [PATCH] instance: drop peer_mgr in time --- easytier/src/instance/instance.rs | 33 ++++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/easytier/src/instance/instance.rs b/easytier/src/instance/instance.rs index 517f0aef..7e2735a1 100644 --- a/easytier/src/instance/instance.rs +++ b/easytier/src/instance/instance.rs @@ -776,10 +776,11 @@ impl Instance { tokio::spawn(async move { let mut output_tx = Some(first_round_output); + loop { let close_notifier = Arc::new(Notify::new()); - { - let Some(peer_mgr) = peer_mgr.upgrade() else { + let mut new_nic_ctx = { + let Some(peer_manager) = peer_mgr.upgrade() else { tracing::warn!("peer manager is dropped, stop static ip check."); if let Some(output_tx) = output_tx.take() { let _ = output_tx.send(Err(Error::Unknown)); @@ -788,26 +789,26 @@ impl Instance { return; }; - let mut new_nic_ctx = NicCtx::new( - peer_mgr.get_global_ctx(), - &peer_mgr, + NicCtx::new( + peer_manager.get_global_ctx(), + &peer_manager, peer_packet_receiver.clone(), close_notifier.clone(), - ); + ) + }; - if let Err(e) = new_nic_ctx.run(ipv4_addr, ipv6_addr).await { - if let Some(output_tx) = output_tx.take() { - let _ = output_tx.send(Err(e)); - return; - } - tracing::error!("failed to create new nic ctx, err: {:?}", e); - tokio::time::sleep(Duration::from_secs(1)).await; - continue; + if let Err(e) = new_nic_ctx.run(ipv4_addr, ipv6_addr).await { + if let Some(output_tx) = output_tx.take() { + let _ = output_tx.send(Err(e)); + return; } - - Self::use_new_nic_ctx(nic_ctx.clone(), new_nic_ctx).await; + tracing::error!("failed to create new nic ctx, err: {:?}", e); + tokio::time::sleep(Duration::from_secs(1)).await; + continue; } + Self::use_new_nic_ctx(nic_ctx.clone(), new_nic_ctx).await; + if let Some(output_tx) = output_tx.take() { let _ = output_tx.send(Ok(())); }