https://gitlab.synchro.net/main/sbbs/-/commit/be4e985b3b9eee2339192cff
Modified Files:
src/doors/syncmoo1/syncmoo1_input.c
Log Message:
syncmoo1: a sequence split across reads is not a lone Escape
sm_input_pump() inherited SyncDuke's original ordering along with the rest of its byte state machine: the pending lone-ESC timer was judged before the read, so the tail of a split escape sequence lost the race even when it was already queued in the socket. The ESC then reached 1oom as the Escape key -- which opens a menu -- with the sequence body following it as ordinary keys.
The window is 50ms of wall clock but is only sampled when the pump runs, and one read of 256 bytes per pump also splits a sequence outright once the mouse reports fill the buffer ahead of it. MoO1 is played almost entirely with the mouse, so that stream is rarely quiet.
Read until the terminal has nothing left, bounded so a flooding client cannot stall the frame, and resolve a pending ESC only afterwards. A genuinely lone Escape still arrives on the first pump past the deadline.
Co-Authored-By: Claude Opus 5 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net