mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-17 07:07:22 +08:00
fix memory leak
This commit is contained in:
@@ -24,6 +24,7 @@ use crate::{
|
||||
config::{ConfigLoader, TomlConfigLoader},
|
||||
error::Error,
|
||||
global_ctx::{ArcGlobalCtx, GlobalCtx, GlobalCtxEvent, NetworkIdentity},
|
||||
join_joinset_background,
|
||||
stun::MockStunInfoCollector,
|
||||
PeerId,
|
||||
},
|
||||
@@ -181,6 +182,15 @@ impl ForeignNetworkEntry {
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for RpcTransport {
|
||||
fn drop(&mut self) {
|
||||
tracing::debug!(
|
||||
"drop rpc transport for foreign network manager, my_peer_id: {:?}",
|
||||
self.my_peer_id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let (rpc_transport_sender, peer_rpc_tspt_recv) = mpsc::unbounded_channel();
|
||||
let tspt = RpcTransport {
|
||||
my_peer_id,
|
||||
@@ -216,7 +226,6 @@ impl ForeignNetworkEntry {
|
||||
.list_global_foreign_peer(&self.network_identity)
|
||||
.await;
|
||||
let local = peer_map.list_peers_with_conn().await;
|
||||
tracing::debug!(?global, ?local, ?self.my_peer_id, "list peers in foreign network manager");
|
||||
global.extend(local.iter().cloned());
|
||||
global
|
||||
.into_iter()
|
||||
@@ -426,7 +435,7 @@ pub struct ForeignNetworkManager {
|
||||
|
||||
data: Arc<ForeignNetworkManagerData>,
|
||||
|
||||
tasks: Mutex<JoinSet<()>>,
|
||||
tasks: Arc<std::sync::Mutex<JoinSet<()>>>,
|
||||
}
|
||||
|
||||
impl ForeignNetworkManager {
|
||||
@@ -444,6 +453,9 @@ impl ForeignNetworkManager {
|
||||
lock: std::sync::Mutex::new(()),
|
||||
});
|
||||
|
||||
let tasks = Arc::new(std::sync::Mutex::new(JoinSet::new()));
|
||||
join_joinset_background(tasks.clone(), "ForeignNetworkManager".to_string());
|
||||
|
||||
Self {
|
||||
my_peer_id,
|
||||
global_ctx,
|
||||
@@ -451,7 +463,7 @@ impl ForeignNetworkManager {
|
||||
|
||||
data,
|
||||
|
||||
tasks: Mutex::new(JoinSet::new()),
|
||||
tasks,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,7 +515,7 @@ impl ForeignNetworkManager {
|
||||
let data = self.data.clone();
|
||||
let network_name = entry.network.network_name.clone();
|
||||
let mut s = entry.global_ctx.subscribe();
|
||||
self.tasks.lock().await.spawn(async move {
|
||||
self.tasks.lock().unwrap().spawn(async move {
|
||||
while let Ok(e) = s.recv().await {
|
||||
match &e {
|
||||
GlobalCtxEvent::PeerRemoved(peer_id) => {
|
||||
|
||||
Reference in New Issue
Block a user