diff --git a/rpcs3/main.cpp b/rpcs3/main.cpp index 68a6b36b68..05222f0d42 100644 --- a/rpcs3/main.cpp +++ b/rpcs3/main.cpp @@ -99,6 +99,20 @@ static semaphore<> s_qt_mutex{}; std::abort(); } +struct pause_on_fatal final : logs::listener +{ + ~pause_on_fatal() override = default; + + void log(u64 /*stamp*/, const logs::message& msg, const std::string& /*prefix*/, const std::string& /*text*/) override + { + if (msg.sev <= logs::level::fatal) + { + // Pause emulation if fatal error encountered + Emu.Pause(); + } + } +}; + const char* arg_headless = "headless"; const char* arg_no_gui = "no-gui"; const char* arg_high_dpi = "hidpi"; @@ -260,6 +274,9 @@ int main(int argc, char** argv) log_file = logs::make_file_listener(fs::get_cache_dir() + "RPCS3.log", stats.avail_free / 4); } + std::unique_ptr log_pauser = std::make_unique(); + logs::listener::add(log_pauser.get()); + { const std::string firmware_version = utils::get_firmware_version(); const std::string firmware_string = firmware_version.empty() ? "" : (" | Firmware version: " + firmware_version);