mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 23:11:25 +12:00
Fix Emulator::Pause race with IDM
This commit is contained in:
parent
aad5283786
commit
d51bb8b1cc
1 changed files with 17 additions and 0 deletions
|
@ -597,6 +597,23 @@ cpu_thread::~cpu_thread()
|
|||
cpu_thread::cpu_thread(u32 id)
|
||||
: id(id)
|
||||
{
|
||||
while (Emu.GetStatus() == system_state::paused)
|
||||
{
|
||||
// Solve race between Emulator::Pause and this construction of thread which most likely is guarded by IDM mutex
|
||||
state += cpu_flag::dbg_global_pause;
|
||||
|
||||
if (Emu.GetStatus() != system_state::paused)
|
||||
{
|
||||
// Emulator::Resume was called inbetween
|
||||
state -= cpu_flag::dbg_global_pause;
|
||||
|
||||
// Recheck if state is inconsistent
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
g_threads_created++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue