aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-06 04:33:45 +0100
committertv <tv@krebsco.de>2026-11-06 04:33:45 +0100
commitde30fc105bbb9c610c847f64e00cd2555ca0c63c (patch)
tree2b13361744eda5ba7606c18da5574744e4265668 /src
parent26ff4ff86b58fed130ce6802ac4aceba8ee93443 (diff)
rtt table pruned
Diffstat (limited to 'src')
-rw-r--r--src/swarm/peer/worker.rs1
-rw-r--r--src/swarm/rtt.rs8
2 files changed, 9 insertions, 0 deletions
diff --git a/src/swarm/peer/worker.rs b/src/swarm/peer/worker.rs
index b5c533a..7a0b502 100644
--- a/src/swarm/peer/worker.rs
+++ b/src/swarm/peer/worker.rs
@@ -201,6 +201,7 @@ pub(crate) async fn run_peer_worker(state: AppState) {
.throughput
.lock_or_recover()
.retain(|peer| known.contains_key(peer));
+ state.lock_rtt().retain(|peer| known.contains_key(peer));
}
// Fallback for what doesn't notify (`topology::run_worker`).
state.topology_changed.notify_one();
diff --git a/src/swarm/rtt.rs b/src/swarm/rtt.rs
index 370754c..6dfe84a 100644
--- a/src/swarm/rtt.rs
+++ b/src/swarm/rtt.rs
@@ -39,6 +39,14 @@ struct Outstanding {
}
impl RttTable {
+ /// Keeps only the peers `keep` says (those still known: else every peer ever
+ /// greeted or measured would stay).
+ pub(crate) fn retain(&mut self, mut keep: impl FnMut(&str) -> bool) {
+ self.hellos.retain(|peer, _| keep(peer));
+ self.from_paths.retain(|peer, _| keep(peer));
+ self.from_hellos.retain(|peer, _| keep(peer));
+ }
+
/// The paths layer's round-trip time to `peer` (`Transport::rtt`), as a PONG from
/// it arrived.
pub(crate) fn measured(&mut self, peer: &str, rtt: Duration, now: Instant) {