summaryrefslogtreecommitdiffstats
path: root/src/swarm/peer.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-21 14:12:01 +0200
committertv <tv@krebsco.de>2026-10-21 14:12:01 +0200
commitc9279e4907ceb3cab2abd3ad6e62d011d7d8a1c2 (patch)
tree006959c9270ed926f8fb0a98aac5ecae46047eb3 /src/swarm/peer.rs
parent5e2bf9b34486b1e1d91a6b2fb6748d506487b915 (diff)
resend sync messages that haven't been replied
Diffstat (limited to 'src/swarm/peer.rs')
-rw-r--r--src/swarm/peer.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/swarm/peer.rs b/src/swarm/peer.rs
index b092b03..6184427 100644
--- a/src/swarm/peer.rs
+++ b/src/swarm/peer.rs
@@ -387,13 +387,21 @@ pub(crate) async fn run_peer_worker(state: AppState) {
for (peer, peer_state_mutex) in &peers {
let now = Instant::now();
- let (became_dormant, ping_due) = {
+ let (became_dormant, ping_due, unanswered) = {
let mut peer_state = peer_state_mutex.lock().await;
let became_dormant = ready && peer_state.check_dormancy(&state.timing, now);
let ping_due = peer_state.take_keepalive_due(&state.timing, now);
- (became_dormant, ping_due)
+ let unanswered = peer_state.take_overdue_sync_reply(now);
+ (became_dormant, ping_due, unanswered)
};
+ if let Some(changes) = unanswered {
+ debug!(peer = %peer, changes, "No answer to our sync message; sending again");
+ let _ = state
+ .sync_events
+ .send(SyncEvent::PeerNeedsSync(peer.clone()));
+ }
+
if became_dormant {
warn!(
peer = %peer,