diff options
| author | tv <tv@krebsco.de> | 2026-11-06 04:32:20 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-06 04:32:20 +0100 |
| commit | c85e4efec5bf8c5d83401816b6de4f46fbedd99e (patch) | |
| tree | 53d2190f00bc015d7c62852d246df8459cd95846 /src/swarm/peer/keepalive.rs | |
| parent | c51bb8a4d8ece9f48d40482b0af8e4be9f771432 (diff) | |
one grace wait per peer
Diffstat (limited to 'src/swarm/peer/keepalive.rs')
| -rw-r--r-- | src/swarm/peer/keepalive.rs | 4 |
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; |
