fix: route_update message is not lag (#2355)

This commit is contained in:
韩嘉乐
2026-06-16 00:00:48 +08:00
committed by GitHub
parent 8909e88484
commit 16b666ad25
@@ -119,7 +119,9 @@ fn sync_tun_event_receivers(receivers: &mut HashMap<String, EventBusSubscriber>)
fn event_needs_tun_refresh(event: &GlobalCtxEvent) -> bool {
matches!(
event,
GlobalCtxEvent::DhcpIpv4Changed(_, _) | GlobalCtxEvent::ProxyCidrsUpdated(_, _)
GlobalCtxEvent::DhcpIpv4Changed(_, _)
| GlobalCtxEvent::ProxyCidrsUpdated(_, _)
| GlobalCtxEvent::PublicIpv6RoutesUpdated(_, _)
)
}
@@ -476,19 +478,16 @@ pub fn start_local_socket_server() -> bool {
.retain(|instance_id, _| active_tun_candidate_ids.contains(instance_id));
shrink_hash_set_if_sparse(&mut delivered_tun_requests);
shrink_hash_map_if_sparse(&mut last_tun_route_signatures);
let has_undelivered_tun_candidate = active_tun_candidate_ids
.iter()
.any(|instance_id| !delivered_tun_requests.contains(instance_id));
let should_evaluate_tun =
tun_refresh || !tun_bootstrap_done || has_undelivered_tun_candidate;
let mut saw_running_instance = false;
let mut saw_tun_candidate = false;
if should_evaluate_tun {
for instance in snapshot.instances.iter() {
if instance.running {
saw_running_instance = true;
}
if instance.running && instance.tun_required {
if !(instance.running && instance.tun_required) {
continue;
}
saw_tun_candidate = true;
let virtual_ipv4 = instance
.my_node_info
@@ -513,13 +512,11 @@ pub fn start_local_socket_server() -> bool {
instance.need_exit_node,
))
.unwrap_or_else(|_| "[]".to_string());
let allow_route_signature_refresh = tun_refresh || !tun_bootstrap_done;
let should_send = !delivered_tun_requests.contains(&instance.instance_id)
|| (allow_route_signature_refresh
&& last_tun_route_signatures
|| last_tun_route_signatures
.get(&instance.instance_id)
.map(|value| value != &route_signature)
.unwrap_or(true));
.unwrap_or(true);
if !should_send {
continue;
}
@@ -540,25 +537,9 @@ pub fn start_local_socket_server() -> bool {
continue;
}
};
if broadcast_local_socket_message(
&mut clients,
"tun_request",
&payload_json,
) {
if broadcast_local_socket_message(&mut clients, "tun_request", &payload_json) {
delivered_tun_requests.insert(instance.instance_id.clone());
last_tun_route_signatures
.insert(instance.instance_id.clone(), route_signature);
}
}
}
} else {
for instance in snapshot.instances.iter() {
if instance.running {
saw_running_instance = true;
}
if instance.running && instance.tun_required {
saw_tun_candidate = true;
}
last_tun_route_signatures.insert(instance.instance_id.clone(), route_signature);
}
}
if !delivered_tun_requests.is_empty()