From c6d16c416fde16463d9fec2ab18f9fb929852dc7 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 31 Oct 2026 03:47:04 +0100 Subject: unify source reset --- src/state/host.rs | 5 ++--- src/swarm/source.rs | 12 +++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/state/host.rs b/src/state/host.rs index b55239d..ee67b80 100644 --- a/src/state/host.rs +++ b/src/state/host.rs @@ -13,7 +13,6 @@ use tracing::debug; use super::{AppState, HelloState, NodeLifecycle, StaleView, Standing}; use crate::document::replica::Epoch; -use crate::locks::MutexExt; use crate::remake::{Host, PeerSummary, RemakeState}; use crate::swarm::sync::{ChangeSet, SyncEvent}; @@ -198,8 +197,8 @@ impl Host for AppState { fn reset_initial_sync(&self) { self.initial_sync_done .store(false, std::sync::atomic::Ordering::Release); - *self.catch_up_source.lock_or_recover() = None; - *self.catch_up_preference.lock_or_recover() = None; + // The source chosen, and the one avoided, were for the catch-up before. + crate::swarm::source::reset(self); } fn subscribe_changes(&self) -> broadcast::Receiver> { diff --git a/src/swarm/source.rs b/src/swarm/source.rs index d80e4d7..5e428f2 100644 --- a/src/swarm/source.rs +++ b/src/swarm/source.rs @@ -286,12 +286,18 @@ pub(crate) fn probe_due(state: &AppState, peer: &str, now: Instant) -> bool { due } -/// The initial sync is done: no source any more, and the peers we held back only need -/// to learn our heads now. -pub(crate) fn finished(state: &AppState, from: &str) { +/// No catch-up going on: no source, no head start, nobody avoided. When one ends, and +/// before one starts (a rejoin: `Host::reset_initial_sync`). +pub(crate) fn reset(state: &AppState) { *lock(state) = None; *lock_preference(state) = None; *lock_avoided(state) = None; +} + +/// The initial sync is done: no source any more, and the peers we held back only need +/// to learn our heads now. +pub(crate) fn finished(state: &AppState, from: &str) { + reset(state); let state = state.clone(); let from = from.to_owned(); tokio::spawn(async move { -- cgit v1.3.1