lbl
d29c9e3122
fix(nat): 修复 UDP NAT 老化回收失效与误删竞态
问题:
1. GC 仅从映射表删除过期条目,其反向转发任务仍阻塞在 socket.recv
上,任务与 socket 永久残留。
2. 条目过期被 GC 删除并以新 socket 重建后,旧任务退出时无条件
remove 会把新条目误删。
修复:
- NatEntry 持有反向转发任务的 SubTask 句柄,GC 回收条目时一并
stop 任务,释放 socket。
- 任务退出时通过 Arc::ptr_eq 确认表中条目仍是本任务的 socket 才删除。
测试:
- test_remove_if_current_only_removes_same_socket: 旧 socket 不能删新条目
- test_entry_inbound_task_stoppable: 条目任务可被 GC 正常终止
2026-08-20 22:58:11 +08:00
..
2026-02-10 18:20:39 +08:00
2026-08-20 22:58:11 +08:00
2026-02-10 18:20:39 +08:00
2026-08-20 20:58:07 +08:00