diff options
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; |
