mirror of
https://github.com/ARMSX2/ARMSX3.git
synced 2026-08-24 16:58:52 -07:00
The watchdog was called under !Emu.IsPaused() && !Emu.IsStopped(). The default IsStopped() overload is m_state <= system_state::stopping, and the enum orders stopped, loading, stopping, running -- so it reports true for a game that is LOADING. A hang during a load is exactly what this watches for. Tales of Xillia 2 white-screens mid-load once its logos are skipped, so the guard skipped the watchdog on every tick of the precise case it exists for, and skipped it silently: not a declined decision anyone could read, just no call at all. Nine minutes of held white screen produced no output whatsoever. Use IsStopped(true), which is the fully-stopped test. Also log the watchdog's decision once every 10s -- progress flag, last frame timestamp, its age, dumps taken. Three attempts at this detector have failed silently on a reproducible hang; the only evidence each time was an absence, which cannot say which branch won. One line per ten seconds makes the next failure a fact rather than another guess.