mirror of
https://github.com/patchzyy/wiicompiled
synced 2026-09-10 09:11:52 -04:00
c2289e4ba4
ProcessSleepTimers popped every due timer into a private vector and then resumed the sleepers in a loop. OSResumeThread re-enters SelectThread, which can switch fibers away mid-loop, so the timers still in that vector were gone from gSleepTimers while their threads stayed parked (Ready, suspended, no timer). The reconciler healed them 100ms later and the stale-timer drop fired when the original fiber eventually resumed. Pop one due timer at a time straight from the shared table instead, so any timer not yet processed stays visible to every other pump while this call is switched away. Co-authored-by: jordanblakepp <slamuelrose2002@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>