修改peerMap的竞态条件

This commit is contained in:
alex 2026-07-04 16:08:01 +08:00
parent 03151cc90e
commit ea85aa1b76

View File

@ -550,18 +550,19 @@ pub async fn check_peer_registration_needed(
_v6_info: &Option<V6Info>,
peer_sock: &SdlanSock,
) {
let p = eee.known_peers.peers.get(&src_mac);
let mut p = eee.known_peers.peers.get_mut(&src_mac);
let last_seen;
let now;
match p {
None => {
drop(p);
debug!("check peer registration needed, not found in known peers");
let _ = register_with_new_peer(eee, from_sn, src_mac, _v6_info, remote_nat, peer_sock)
.await;
return;
// unimplemented!();
}
Some(k) => {
Some(ref mut k) => {
// let mut ipv4_to_ipv6 = false;
now = get_current_timestamp();
if !from_sn {
@ -575,8 +576,8 @@ pub async fn check_peer_registration_needed(
mac_to_string(&src_mac)
);
// k.sock = peer_sock.deepcopy();
// k.last_seen.store(now, Ordering::Relaxed);
k.sock = peer_sock.deepcopy();
k.last_seen.store(now, Ordering::Relaxed);
} else {
return;
}
@ -594,6 +595,7 @@ pub async fn check_peer_registration_needed(
// more than 3 seconds
}
}
drop(p);
if now - last_seen > 3 {
check_known_peer_sock_change(eee, from_sn, src_mac, peer_sock, now, false).await;
@ -673,6 +675,7 @@ async fn register_with_new_peer(
peersock.to_string(),
);
drop(scan);
if from_sn {
// should send register to peer
if eee.config.register_ttl == 1 {
@ -712,12 +715,15 @@ async fn register_with_new_peer(
send_register(eee, remote_nat, peersock, mac, v6_info).await;
}
register_with_local_peers(eee).await;
if let Some(mut s) = eee.pending_peers.peers.get_mut(&mac) {
s.last_seen
.store(get_current_timestamp(), Ordering::Relaxed);
}
} else {
scan.sock = peersock.deepcopy();
}
scan.last_seen
.store(get_current_timestamp(), Ordering::Relaxed);
}
}
async fn register_with_local_peers(eee: &'static Node) {