You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix 5 bugs found in zhonghua2's deep functional test, incl. §7.12/§7.17
recurrences
Round-two deep functional test (AGENTS.md §10.7), including two complete
real 15-minute net-dead timeout waits.
1. cmds/usr/league.lpc: missing "check" case for logind.lpc's silent
internal per-login/reconnect call (league.main(this_player(),
"check")) -- fell through to the default branch, printing a
meaningless "无效的参数。" to every player on every login/reconnect.
Added the case.
2. cmds/std/whisper.lpc: a copy-pasted duplicate tell_object() call
printed every whisper to a real player twice (confirmed byte-
identical to the pre-existing archive). Removed the duplicate.
3. AGENTS.md §7.12/§6.5 combo: adm/simul_efun/message.lpc defines its
own message() wrapper specifically to guard the exclude argument,
but tell_room() (and others) called plain message(...) textually
before the wrapper's own definition, silently binding to the real
driver efun instead and bypassing the existing fix entirely --
reached from user_dump()'s net-dead force-quit path. Added a
forward declaration so every call site resolves to the local
wrapper regardless of textual order. Live-verified via a real full
15-minute net-dead wait (driver stayed alive, clean reconnect).
4. adm/daemons/logind.lpc: an unguarded lazy-load of MESSAGE_D (never
preloaded due to a stale preload entry) throws on its first-ever
load each boot (a config-ID/socket_bind() mismatch, same root cause
already documented for versiond.lpc/dns_master.lpc) -- broke login
for the first player to reconnect/relogin after any fresh boot.
Wrapped in catch(), matching this codebase's own established
pattern for the same class of lazy-load daemon.
5. adm/daemons/rebornd.lpc: jingyan_open()/wudie_open() had a stale
2-char slice (leftover from the original .c extension) that could
never match ".lpc" -- confirmed byte-identical to the pre-existing
archive, a genuine post-rename fallout. Combined with an unbounded
do-while retry loop, this permanently killed each mystery-entrance
feature's self-rescheduling chain on the first bad pick every boot.
Fixed the slice width, bounded the retry loop, and added an
explicit reschedule-on-failure so the feature always tries again
later instead of silently dying. Also guarded qilin_open()'s
unguarded call_other on a genuinely-missing room (not fabricated)
with the same reschedule pattern, and fixed a stray-semicolon dead
conditional in qilin_close().
Also proactively applied the AGENTS.md §7.17 room-reset reentrancy
guard to inherit/room/room.lpc as defense-in-depth (the primary
whisper-duplication symptom was independently traced to bug 2 above,
but the structural reentrancy hazard is real and shared by every
room).
0 commit comments