修改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>,
|
_v6_info: &Option<V6Info>,
|
||||||
peer_sock: &SdlanSock,
|
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 last_seen;
|
||||||
let now;
|
let now;
|
||||||
match p {
|
match p {
|
||||||
None => {
|
None => {
|
||||||
|
drop(p);
|
||||||
debug!("check peer registration needed, not found in known peers");
|
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)
|
let _ = register_with_new_peer(eee, from_sn, src_mac, _v6_info, remote_nat, peer_sock)
|
||||||
.await;
|
.await;
|
||||||
return;
|
return;
|
||||||
// unimplemented!();
|
// unimplemented!();
|
||||||
}
|
}
|
||||||
Some(k) => {
|
Some(ref mut k) => {
|
||||||
// let mut ipv4_to_ipv6 = false;
|
// let mut ipv4_to_ipv6 = false;
|
||||||
now = get_current_timestamp();
|
now = get_current_timestamp();
|
||||||
if !from_sn {
|
if !from_sn {
|
||||||
@ -575,8 +576,8 @@ pub async fn check_peer_registration_needed(
|
|||||||
mac_to_string(&src_mac)
|
mac_to_string(&src_mac)
|
||||||
);
|
);
|
||||||
|
|
||||||
// k.sock = peer_sock.deepcopy();
|
k.sock = peer_sock.deepcopy();
|
||||||
// k.last_seen.store(now, Ordering::Relaxed);
|
k.last_seen.store(now, Ordering::Relaxed);
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -594,6 +595,7 @@ pub async fn check_peer_registration_needed(
|
|||||||
// more than 3 seconds
|
// more than 3 seconds
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
drop(p);
|
||||||
|
|
||||||
if now - last_seen > 3 {
|
if now - last_seen > 3 {
|
||||||
check_known_peer_sock_change(eee, from_sn, src_mac, peer_sock, now, false).await;
|
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(),
|
peersock.to_string(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
drop(scan);
|
||||||
if from_sn {
|
if from_sn {
|
||||||
// should send register to peer
|
// should send register to peer
|
||||||
if eee.config.register_ttl == 1 {
|
if eee.config.register_ttl == 1 {
|
||||||
@ -712,13 +715,16 @@ async fn register_with_new_peer(
|
|||||||
send_register(eee, remote_nat, peersock, mac, v6_info).await;
|
send_register(eee, remote_nat, peersock, mac, v6_info).await;
|
||||||
}
|
}
|
||||||
register_with_local_peers(eee).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 {
|
} else {
|
||||||
scan.sock = peersock.deepcopy();
|
scan.sock = peersock.deepcopy();
|
||||||
}
|
|
||||||
|
|
||||||
scan.last_seen
|
scan.last_seen
|
||||||
.store(get_current_timestamp(), Ordering::Relaxed);
|
.store(get_current_timestamp(), Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async fn register_with_local_peers(eee: &'static Node) {
|
async fn register_with_local_peers(eee: &'static Node) {
|
||||||
if !eee.config._drop_multicast {
|
if !eee.config._drop_multicast {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user