diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index 82f47e0306..9e8a70289a 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1295,6 +1295,7 @@ bool handle_access_violation(u32 addr, bool is_writing, x64_context* context) } } + vm::temporary_unlock(*cpu); LOG_FATAL(MEMORY, "Access violation %s location 0x%x", is_writing ? "writing" : "reading", addr); cpu->state += cpu_flag::dbg_pause; cpu->check_state(); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 10e2069a8d..f5e7b80eb6 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -924,7 +924,13 @@ void Emulator::Stop(bool restart) auto on_select = [&](u32, cpu_thread& cpu) { cpu.state += cpu_flag::dbg_global_stop; - cpu.get()->set_exception(e_stop); + + // Can't normally be null. + // Hack for a possible vm deadlock on thread creation. + if (auto thread = cpu.get()) + { + thread->set_exception(e_stop); + } }; idm::select(on_select);