https://gitlab.synchro.net/main/sbbs/-/commit/2f2f38f559bd01dc6efc897c
Modified Files:
src/doors/syncdoom/syncdoom.c src/doors/syncduke/syncduke_io.c src/doors/termgfx/pace.c pace.h
Log Message:
termgfx: share the DSR RTT-sample update between the doors
Second slice of the present/pace unification. Both doors fold each DSR round-trip
into a 3/4 RTT EMA, latch rt_high at 40ms, and track a min-RTT baseline, then run
the AIMD -- the same logic, with two small divergences: SyncDOOM also rejects a stale sample (a late reply for a reclaimed frame, rtt < EMA/3) and re-seeds the baseline after an 8s window; SyncDuke does neither.
Extract it as termgfx_rtt_sample() parameterized by those two knobs (stale_reject,
rtt_min_window_ms): Duke passes (0, 0), Doom passes (1, RTT_MIN_WINDOW). The function returns whether the sample was accepted so each door runs the AIMD only
then. The DSR send-time ring + inflight + the reclaim/gate stay per-door.
Pure refactor -- proven bit-identical to each door's old inline RTT logic across
14160 replayed samples (spanning stale/normal/spike RTT and the 8s window), 0 mismatches. Adds a rtt_min_at to SyncDuke (written by the helper, unused there since its window is 0).
Co-Authored-By: Claude Opus 4.8 <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net