aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm')
-rw-r--r--src/swarm/sync.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/swarm/sync.rs b/src/swarm/sync.rs
index e551cb8..0edc277 100644
--- a/src/swarm/sync.rs
+++ b/src/swarm/sync.rs
@@ -487,6 +487,17 @@ pub(crate) async fn handle_sync(
)
}
transport::SyncBody::Delta(spec) => {
+ // An offer answers what we sent as much as a message would: the wait for an
+ // answer ends here, not when the download does (its reply timeout would
+ // otherwise count against a peer that answered, suspect its path and give it
+ // up as the source to catch up from). What it offers is what it has.
+ {
+ let mut peer_state = peer_state_mutex.lock().await;
+ peer_state.reports_ready = Some(from_ready);
+ peer_state.last_heads = Some((epoch, transport::HeadsSummary::of(spec.to.clone())));
+ peer_state.last_sync_rx = Some(Instant::now());
+ peer_state.sync.answered_by_offer();
+ }
fetch_delta(state, peer, epoch, spec);
return Ok(());
}