Atomic waiting refactoring (#9208)

* Use atomic waitables instead instead of global thread wait as often as possible.
* Add ::is_stopped() and and ::is_paued() which can be used in atomic loops and with atomic wait. (constexpr cpu flags test functions)
* Fix notification bug of sys_spu_thread_group_exit/terminate. (old bug, enhanced by #9117)
* Function time statistics at Emu.Stop() restored. (instead of current "X syscall failed with 0x00000000 : 0")
This commit is contained in:
Eladash 2021-02-13 16:50:07 +02:00 committed by GitHub
parent cf384795d2
commit f43260bd58
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 375 additions and 234 deletions

View file

@ -161,7 +161,7 @@ debugger_frame::debugger_frame(std::shared_ptr<gui_settings> settings, QWidget *
// Notify only if no pause flags are set after this change
if (!(old & s_pause_flags))
{
cpu->notify();
cpu->state.notify_one(s_pause_flags);
}
}
UpdateUI();
@ -852,7 +852,7 @@ void debugger_frame::DoStep(bool stepOver)
if (!should_step_over) state += cpu_flag::dbg_step;
});
cpu->notify();
cpu->state.notify_one(s_pause_flags);
}
}