Merge pull request #12471 from FearlessTobi/port-7146
Port citra-emu/citra#7146: "assert/logging: Stop the logging thread and flush the backends before crashing"
This commit is contained in:
		| @@ -3,16 +3,19 @@ | ||||
|  | ||||
| #include "common/assert.h" | ||||
| #include "common/common_funcs.h" | ||||
| #include "common/logging/backend.h" | ||||
|  | ||||
| #include "common/settings.h" | ||||
|  | ||||
| void assert_fail_impl() { | ||||
|     if (Settings::values.use_debug_asserts) { | ||||
|         Common::Log::Stop(); | ||||
|         Crash(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| [[noreturn]] void unreachable_impl() { | ||||
|     Common::Log::Stop(); | ||||
|     Crash(); | ||||
|     throw std::runtime_error("Unreachable code"); | ||||
| } | ||||
|   | ||||
| @@ -208,6 +208,10 @@ public: | ||||
|         instance->StartBackendThread(); | ||||
|     } | ||||
|  | ||||
|     static void Stop() { | ||||
|         instance->StopBackendThread(); | ||||
|     } | ||||
|  | ||||
|     Impl(const Impl&) = delete; | ||||
|     Impl& operator=(const Impl&) = delete; | ||||
|  | ||||
| @@ -259,6 +263,15 @@ private: | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     void StopBackendThread() { | ||||
|         backend_thread.request_stop(); | ||||
|         if (backend_thread.joinable()) { | ||||
|             backend_thread.join(); | ||||
|         } | ||||
|  | ||||
|         ForEachBackend([](Backend& backend) { backend.Flush(); }); | ||||
|     } | ||||
|  | ||||
|     Entry CreateEntry(Class log_class, Level log_level, const char* filename, unsigned int line_nr, | ||||
|                       const char* function, std::string&& message) const { | ||||
|         using std::chrono::duration_cast; | ||||
| @@ -313,6 +326,10 @@ void Start() { | ||||
|     Impl::Start(); | ||||
| } | ||||
|  | ||||
| void Stop() { | ||||
|     Impl::Stop(); | ||||
| } | ||||
|  | ||||
| void DisableLoggingInTests() { | ||||
|     initialization_in_progress_suppress_logging = true; | ||||
| } | ||||
|   | ||||
| @@ -14,6 +14,9 @@ void Initialize(); | ||||
|  | ||||
| void Start(); | ||||
|  | ||||
| /// Explicitly stops the logger thread and flushes the buffers | ||||
| void Stop(); | ||||
|  | ||||
| void DisableLoggingInTests(); | ||||
|  | ||||
| /** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user