mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-24 00:02:45 +02:00
sndHandleEvent's pool-exhaustion preempt-scan read/walked the shared D_800243E4 active-ALSoundState list with no osSetIntMask lock, while sndSetupSound (the list's insert path, reached from sndPlaySfx calls across 15 game files) already locks it -- an asymmetric-locking gap, the same D4/D147/D152 "N64 interrupts-off isn't a real lock on PC" class. Wraps the scan in the identical lock/unlock pair sndSetupSound already uses, unconditionally (no #ifdef PORT, matching that function's own style -- osSetIntMask is genuine N64 API and the port's shim is a process-wide recursive lock, safe to nest). Audited the rest of the function: the scan is the only D_800243E4 touch point in it. Build green; -level_09/-level_20 unregressed (1400+ frames, no crash, no D152 lock-stuck warnings). Not yet gdb/live-confirmed against a real reproduced crash -- a GE_INPUTSCRIPT-driven stress attempt this session didn't visibly activate the scripted-input harness for a reason not root-caused; the honest bar met here is "correct by D4/D152 precedent, build/sweep-clean," not "reproduced-then-fixed." Claude-Session: https://claude.ai/code/session_01KwZViAFaXua3PKgHHjNgvi