diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index bcc9008d89..80d4295fe1 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -179,7 +179,7 @@ void Emulator::CallFromMainThread(std::function&& func, atomic_t* w m_cb.call_from_main_thread(std::move(final_func), wake_up); } -void Emulator::BlockingCallFromMainThread(std::function&& func) const +void Emulator::BlockingCallFromMainThread(std::function&& func, u32 line, u32 col, const char* file, const char* fun) const { atomic_t wake_up = 0; @@ -187,7 +187,10 @@ void Emulator::BlockingCallFromMainThread(std::function&& func) const while (!wake_up) { - ensure(thread_ctrl::get_current()); + if (!thread_ctrl::get_current()) + { + fmt::throw_exception("Current thread null while calling BlockingCallFromMainThread from %s", src_loc{line, col, file, fun}); + } wake_up.wait(0); } } diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 4aa7e281ba..f552136969 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -185,7 +185,11 @@ public: void CallFromMainThread(std::function&& func, atomic_t* wake_up = nullptr, bool track_emu_state = true, u64 stop_ctr = umax) const; // Blocking call from the GUI thread - void BlockingCallFromMainThread(std::function&& func) const; + void BlockingCallFromMainThread(std::function&& func, + u32 line = __builtin_LINE(), + u32 col = __builtin_COLUMN(), + const char* file = __builtin_FILE(), + const char* fun = __builtin_FUNCTION()) const; enum class stop_counter_t : u64{};