diff options
Diffstat (limited to 'src/swarm')
| -rw-r--r-- | src/swarm/peer.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/swarm/peer.rs b/src/swarm/peer.rs index 0ef42bf..bc3eaf9 100644 --- a/src/swarm/peer.rs +++ b/src/swarm/peer.rs @@ -129,9 +129,18 @@ pub(crate) async fn local_keepalive(state: &AppState, peer: &str) -> transport:: async fn note_keepalive(state: &AppState, peer: &str, remote: &transport::Keepalive) { if let Some(peer_state) = state.get_peer_state(peer).await { let mut peer_state = peer_state.lock().await; + let became_ready = remote.ready && peer_state.reports_ready != Some(true); peer_state.reports_ready = Some(remote.ready); peer_state.syncs_with_us = Some(remote.syncs_with_you); peer_state.reported_heads = remote.heads.heads().map(<[_]>::len); + drop(peer_state); + if became_ready { + // We may have left the opening to it while it wasn't ready, and nothing else + // would make us look again. + let _ = state + .sync_events + .send(SyncEvent::PeerNeedsSync(peer.to_owned())); + } } crate::swarm::source::reported(state, peer, remote.ready, Some(remote.syncs_with_you)); } |
