fix socks5 and tcp forward mem leak (#1721)

Co-authored-by: sijie.sun <sijie.sun@smartx.com>
This commit is contained in:
21paradox
2025-12-31 00:01:44 +08:00
committed by GitHub
parent 541fc664e3
commit 9c316ea01c
+6 -6
View File
@@ -417,12 +417,15 @@ impl Socks5ServerNet {
), ),
); );
let forward_tasks = Arc::new(std::sync::Mutex::new(forward_tasks));
join_joinset_background(forward_tasks.clone(), "Socks5ServerNet".to_string());
Self { Self {
ipv4_addr, ipv4_addr,
auth, auth,
smoltcp_net: Arc::new(net), smoltcp_net: Arc::new(net),
forward_tasks: Arc::new(std::sync::Mutex::new(forward_tasks)), forward_tasks,
entries, entries,
} }
@@ -481,7 +484,6 @@ pub struct Socks5Server {
net: Arc<Mutex<Option<Socks5ServerNet>>>, net: Arc<Mutex<Option<Socks5ServerNet>>>,
entries: Socks5EntrySet, entries: Socks5EntrySet,
tcp_forward_task: Arc<std::sync::Mutex<JoinSet<()>>>,
udp_client_map: Arc<DashMap<UdpClientKey, Arc<UdpClientInfo>>>, udp_client_map: Arc<DashMap<UdpClientKey, Arc<UdpClientInfo>>>,
udp_forward_task: Arc<DashMap<UdpClientKey, ScopedTask<()>>>, udp_forward_task: Arc<DashMap<UdpClientKey, ScopedTask<()>>>,
@@ -595,7 +597,6 @@ impl Socks5Server {
net: Arc::new(Mutex::new(None)), net: Arc::new(Mutex::new(None)),
entries: Arc::new(DashMap::new()), entries: Arc::new(DashMap::new()),
tcp_forward_task: Arc::new(std::sync::Mutex::new(JoinSet::new())),
udp_client_map: Arc::new(DashMap::new()), udp_client_map: Arc::new(DashMap::new()),
udp_forward_task: Arc::new(DashMap::new()), udp_forward_task: Arc::new(DashMap::new()),
@@ -613,7 +614,6 @@ impl Socks5Server {
let peer_manager = self.peer_manager.clone(); let peer_manager = self.peer_manager.clone();
let packet_recv = self.packet_recv.clone(); let packet_recv = self.packet_recv.clone();
let entries = self.entries.clone(); let entries = self.entries.clone();
let tcp_forward_task = self.tcp_forward_task.clone();
let udp_client_map = self.udp_client_map.clone(); let udp_client_map = self.udp_client_map.clone();
let cancel_tokens = self.cancel_tokens.clone(); let cancel_tokens = self.cancel_tokens.clone();
let port_forward_list_change_notifier = self.port_forward_list_change_notifier.clone(); let port_forward_list_change_notifier = self.port_forward_list_change_notifier.clone();
@@ -634,7 +634,6 @@ impl Socks5Server {
prev_ipv4 = cur_ipv4; prev_ipv4 = cur_ipv4;
entries.clear(); entries.clear();
tcp_forward_task.lock().unwrap().abort_all();
udp_client_map.clear(); udp_client_map.clear();
if let Some(cur_ipv4) = cur_ipv4 { if let Some(cur_ipv4) = cur_ipv4 {
@@ -804,7 +803,8 @@ impl Socks5Server {
let net = self.net.clone(); let net = self.net.clone();
let entries = self.entries.clone(); let entries = self.entries.clone();
let tasks = Arc::new(std::sync::Mutex::new(JoinSet::new())); let tasks = Arc::new(std::sync::Mutex::new(JoinSet::new()));
let forward_tasks = tasks.clone(); join_joinset_background(tasks.clone(), "tcp port forward".to_string());
let forward_tasks = tasks;
let kcp_endpoint = self.kcp_endpoint.lock().await.clone(); let kcp_endpoint = self.kcp_endpoint.lock().await.clone();
let peer_mgr = Arc::downgrade(&self.peer_manager.clone()); let peer_mgr = Arc::downgrade(&self.peer_manager.clone());
let cancel_token = CancellationToken::new(); let cancel_token = CancellationToken::new();