https://gitlab.synchro.net/main/sbbs/-/commit/20ddeb0b1d9ad114fa1b4131
Added Files:
src/doors/syncduke/syncduke_log.c
Modified Files:
src/doors/syncduke/CMakeLists.txt syncduke.h syncduke_config.c syncduke_door.c syncduke_input.c syncduke_io.c src/doors/syncduke/tests/test_keymap.c
Log Message:
syncduke: debug log, crash handler, and resilient door I/O
Add an optional file debug log (syncduke_log.c), independent of the BBS's stderr/syslog capture -- a door that drops back to the BBS otherwise leaves nothing logged, and WER minidumps aren't configured on this host:
- enabled via syncduke.ini [debug] log, env SYNCDUKE_LOG, or -log <path>; a
relative path lands in each player's per-user dir. Timestamped, flushed
per line so a crash/hangup still leaves the tail on disk.
- installs a last-resort crash handler (SetUnhandledExceptionFilter on
Windows, SIGSEGV/etc on *nix) that records the fault to the log, plus an
atexit marker -- so hangups, clean exits, and crashes are all captured.
- hangup() and the send/recv error paths log the reason incl. WSA codes.
Make transient socket errors non-fatal: send()/recv() returning WSAENOBUFS
or WSAEINTR are backpressure (retry next tick), not a dead client. A burst
of large frames (e.g. holding a key, which defeats the frame de-dupe) can surface WSAENOBUFS, which previously dropped the player back to the BBS.
Also: clamp the mouse-sensitivity slider floor to 1 (0 = no turn at all),
and wire the git build-info (synchronet_gitinfo) + the syncduke_record_enabled / [game] record plumbing used by the menu and demo changes that follow.
Co-Authored-By: Claude Opus 4.8 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net