• src/doors/syncdoom/syncdoom.c src/doors/syncduke/syncduke_io.c src/doo

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Jun 28 00:21:32 2026
    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