summaryrefslogtreecommitdiffstats
path: root/src/swarm
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm')
-rw-r--r--src/swarm/peer.rs9
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));
}