From c85e4efec5bf8c5d83401816b6de4f46fbedd99e Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 6 Nov 2026 04:32:20 +0100 Subject: one grace wait per peer --- src/swarm/peer/keepalive.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/swarm/peer/keepalive.rs') 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; -- cgit v1.3.1