mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 02:32:36 +01:00
vm: Attempt to not remove cpu_flag::wait flag during access violation
This commit is contained in:
parent
b0e2c959eb
commit
ddba30988b
@ -1242,14 +1242,16 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
|
||||
|
||||
if (rsx::g_access_violation_handler)
|
||||
{
|
||||
bool state_changed = false;
|
||||
|
||||
if (cpu)
|
||||
{
|
||||
vm::temporary_unlock(*cpu);
|
||||
state_changed = vm::temporary_unlock(*cpu);
|
||||
}
|
||||
|
||||
bool handled = rsx::g_access_violation_handler(addr, is_writing);
|
||||
|
||||
if (cpu && (cpu->state += cpu_flag::temp, cpu->test_stopped()))
|
||||
if (state_changed && (cpu->state += cpu_flag::temp, cpu->test_stopped()))
|
||||
{
|
||||
//
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ enum ppu_thread_status : u32;
|
||||
|
||||
namespace vm
|
||||
{
|
||||
void temporary_unlock(cpu_thread& cpu) noexcept;
|
||||
bool temporary_unlock(cpu_thread& cpu) noexcept;
|
||||
}
|
||||
|
||||
namespace cpu_counter
|
||||
|
@ -380,7 +380,7 @@ namespace vm
|
||||
}
|
||||
}
|
||||
|
||||
void temporary_unlock(cpu_thread& cpu) noexcept
|
||||
bool temporary_unlock(cpu_thread& cpu) noexcept
|
||||
{
|
||||
bs_t<cpu_flag> add_state = cpu_flag::wait;
|
||||
|
||||
@ -392,7 +392,10 @@ namespace vm
|
||||
if (add_state - cpu.state)
|
||||
{
|
||||
cpu.state += add_state;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void temporary_unlock() noexcept
|
||||
|
@ -105,7 +105,7 @@ namespace vm
|
||||
void passive_unlock(cpu_thread& cpu);
|
||||
|
||||
// Optimization (set cpu_flag::memory)
|
||||
void temporary_unlock(cpu_thread& cpu) noexcept;
|
||||
bool temporary_unlock(cpu_thread& cpu) noexcept;
|
||||
void temporary_unlock() noexcept;
|
||||
|
||||
struct writer_lock final
|
||||
|
Loading…
Reference in New Issue
Block a user