diff options
Diffstat (limited to 'src/swarm/peer.rs')
| -rw-r--r-- | src/swarm/peer.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/swarm/peer.rs b/src/swarm/peer.rs index d801b0f..bad8e24 100644 --- a/src/swarm/peer.rs +++ b/src/swarm/peer.rs @@ -133,12 +133,21 @@ async fn heal_if_diverged( return; }; - let heal = peer_state_mutex.lock().await.needs_heal( - &local.heads_digest, - &remote.heads_digest, - &state.timing, - Instant::now(), - ); + let heal = { + let mut peer_state = peer_state_mutex.lock().await; + if local.heads_digest == remote.heads_digest { + // Same document: whatever answer we were waiting for, there is nothing left + // to send. (Automerge answers only when it has something to say, so a sync + // message to a peer that already has everything gets no reply at all.) + peer_state.sync_in_step(); + } + peer_state.needs_heal( + &local.heads_digest, + &remote.heads_digest, + &state.timing, + Instant::now(), + ) + }; if heal { warn!(peer = %peer, "Documents differ and sync is idle; re-handshaking to restart sync"); |
