fix(lib): free a silent parent's slot and pace the moves we report

A candidate that accepted the dial and then said nothing kept its slot
for the session, and ten of those blocked every later batch; a link now
closes after a minute of silence. A parent that flaps its level made us
tell the server four messages per flap; moves are now told at most once
a second, the latest one winning. A parent that reports level zero is
its own root from then on, whatever it said before. The wait for a
searcher's control connection runs from the last message queued for it,
not the first. A successful login is pinned to reset the leaf.
This commit is contained in:
Michel de Graaf
2026-09-08 01:45:07 +02:00
parent 9d6a5aaa98
commit 85f26134ed
4 changed files with 111 additions and 14 deletions
+9
View File
@@ -26,6 +26,15 @@ impl Client {
Self::sweep_stale_offers(&client_context);
if let Ok(mut ctx) = client_context.write_safe() {
ctx.expire_pending_peer_messages(Instant::now());
if let Some(branch) =
ctx.leaf.due_announcement(Instant::now())
{
super::distributed::announce(
ctx.server_sender.as_ref(),
&branch,
true,
);
}
}
}
let operation = match next {