aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/relay.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm/relay.rs')
-rw-r--r--src/swarm/relay.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/swarm/relay.rs b/src/swarm/relay.rs
index f141dbb..98d4ca0 100644
--- a/src/swarm/relay.rs
+++ b/src/swarm/relay.rs
@@ -126,8 +126,15 @@ pub(crate) async fn announce(state: &AppState, from: &str, writers: &[u64], unau
let slow = slow.get_or_insert_with(Pending::default);
slow.senders.insert(from.to_owned());
slow.all = true;
+ // Our children were sent the changes, but those that reach no member but us
+ // hear of a lost message from nobody else (`Plan::alone`).
for plan in &plans {
- slow.sent.extend(plan.children.iter().cloned());
+ slow.sent.extend(
+ plan.children
+ .iter()
+ .filter(|child| !plan.alone.contains(child))
+ .cloned(),
+ );
}
schedule
};