mirror of
https://github.com/ARMSX2/ARMSX3.git
synced 2026-08-24 16:58:52 -07:00
CallFromMainThread without a wake_up is a post: upstream hands the callback to the GUI thread and returns. This ran it inline instead, under whatever locks the caller held. lv2_obj::sleep_unlocked posts one while holding lv2_obj::g_mutex, which is what the comment on that call site is about. The callback is FinalizeRunRequest, the wake for a restored savestate, so it took g_mutex against itself and every thread stopped there: the log reaches Final Thread and goes quiet with the SPUs spinning and the progress overlay frozen on its last figure. It took out loading a state and saving one alike, a save being a stop and a restore. Callers passing wake_up are waiting on completion and still run inline.