Fix crash on exit after access violation

This commit is contained in:
Nekotekina 2018-03-11 19:29:34 +03:00
parent c0a0cb98c5
commit 4b1c052030
2 changed files with 8 additions and 1 deletions

View File

@ -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); LOG_FATAL(MEMORY, "Access violation %s location 0x%x", is_writing ? "writing" : "reading", addr);
cpu->state += cpu_flag::dbg_pause; cpu->state += cpu_flag::dbg_pause;
cpu->check_state(); cpu->check_state();

View File

@ -924,7 +924,13 @@ void Emulator::Stop(bool restart)
auto on_select = [&](u32, cpu_thread& cpu) auto on_select = [&](u32, cpu_thread& cpu)
{ {
cpu.state += cpu_flag::dbg_global_stop; 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<ppu_thread>(on_select); idm::select<ppu_thread>(on_select);