fix memory leak

This commit is contained in:
sijie.sun
2025-03-05 17:53:19 +08:00
committed by Sijie.Sun
parent 673c34cf5a
commit 568dca6f9c
5 changed files with 45 additions and 31 deletions

View File

@@ -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) => {