Files
goldeneye-pc-port/src
James Dansereau dc5739bc93 D167: D152 addendum -- audio osSetIntMask audit + narrow lock-leak fixes
Static audit of every osSetIntMask(OS_IM_NONE) in the compiled audio code
(event.c, csplayer.c, synaddplayer.c, snd.c): all balanced on every exit
path, including alEvtqPostEvent's freeList-empty early return. No unbalanced
same-thread leak exists -- the D152 s_imLock wedge is not a missing restore.

Two real defects fixed (#ifdef PORT, N64 verbatim under #else):

1. snd.c sndSetSfxSlotVolume walked the live ALSoundState list and posted to
   the shared ALEventQueue without holding OS_IM_NONE, unlike its twin
   sndDeactivateAllSfxByFlag. On PC: unguarded walk racing amMain + one lock
   acquire/release per matching sound. During the mission-failed fade-out
   (sndSetScalerApplyVolumeAllSfxSlot -> sndApplyVolumeAllSfxSlot -> here,
   per frame) that is a per-frame lock-acquire storm. Now holds the mask once
   across the walk; sndApplyVolumeAllSfxSlot batches its slot loop under one
   recursive hold.

2. port/src/libultra.c: portThreadWrapper now calls imThreadExitRelease() when
   a host thread returns from its entry -- if it still owns s_imHeld, release
   the orphan (+ LOG_ERROR). Kills the 'transient thread acquired OS_IM_NONE
   and exited' leak (the §F dump's own alternate hypothesis) and the re-wedge
   when a new thread reuses the dead pthread id and imAcquire mis-detects
   recursion. Steal-lock kept as backstop.

Build 240/240 green; -level_09 frame 300 renders 91.7% non-clear crash-free;
-level_20 boots crash-free. Fade-out repro is playtest-gated (not headless-
reproducible) -- user to confirm no black screen + no D152: log lines.
2026-08-31 12:49:06 -04:00
..
2023-09-28 11:49:33 -04:00
2026-08-16 17:30:25 -04:00
2020-11-20 14:35:54 -06:00
2022-06-06 15:07:33 -05:00
2026-08-16 17:30:25 -04:00
2026-08-16 17:30:25 -04:00
2026-08-16 17:30:25 -04:00
2020-11-20 14:35:54 -06:00
2022-06-06 15:07:33 -05:00
2020-11-20 14:35:54 -06:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2026-08-16 17:30:25 -04:00
2026-08-16 17:30:25 -04:00
2022-06-06 15:07:33 -05:00
2023-09-28 11:49:33 -04:00
2026-08-16 17:30:25 -04:00
2023-09-28 11:49:33 -04:00
2023-09-28 11:49:33 -04:00
2026-08-16 17:30:25 -04:00
2026-08-16 17:30:25 -04:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2026-08-16 17:30:25 -04:00
2026-08-16 17:30:25 -04:00
2022-10-29 10:41:01 -04:00
2022-06-06 15:07:33 -05:00
2026-08-16 17:30:25 -04:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2023-09-28 11:49:33 -04:00
2023-09-28 11:49:33 -04:00
2026-08-16 17:30:25 -04:00
2026-08-16 17:30:25 -04:00
2022-06-06 15:07:33 -05:00
2022-06-06 15:07:33 -05:00
2023-09-28 11:49:33 -04:00
2023-09-28 11:49:33 -04:00
2023-09-28 11:49:33 -04:00
2023-09-28 11:49:33 -04:00