修改peerMap的竞态条件
This commit is contained in:
parent
03151cc90e
commit
ea85aa1b76
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user