aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/peer/keepalive.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-06 04:32:20 +0100
committertv <tv@krebsco.de>2026-11-06 04:32:20 +0100
commitc85e4efec5bf8c5d83401816b6de4f46fbedd99e (patch)
tree53d2190f00bc015d7c62852d246df8459cd95846 /src/swarm/peer/keepalive.rs
parentc51bb8a4d8ece9f48d40482b0af8e4be9f771432 (diff)
one grace wait per peer
Diffstat (limited to 'src/swarm/peer/keepalive.rs')
-rw-r--r--src/swarm/peer/keepalive.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/swarm/peer/keepalive.rs b/src/swarm/peer/keepalive.rs
index 3b78b85..d698585 100644
--- a/src/swarm/peer/keepalive.rs
+++ b/src/swarm/peer/keepalive.rs
@@ -250,12 +250,14 @@ pub(super) async fn note_status(state: &AppState, peer: &str, remote: &transport
),
}
}
+ // One grace wait per peer: a STATUS meanwhile only becomes the one it ends with.
+ let waiting = peer_state.pull_pending.replace(remote.clone()).is_some();
drop(peer_state);
if left {
info!(peer = %peer, "Peer said farewell; dormant until it is heard from again");
}
// Off the consumer: telling which heads we lack takes the document's lock.
- {
+ if !waiting {
let (state, peer, remote) = (state.clone(), peer.to_owned(), remote.clone());
tokio::spawn(async move {
crate::swarm::relay::pull_after_grace(&state, &peer, &remote).await;