From 84b4ac572954c3fbf114a877f00a12020d3b31f8 Mon Sep 17 00:00:00 2001 From: ameerj <52414509+ameerj@users.noreply.github.com> Date: Tue, 24 Aug 2021 01:32:38 -0400 Subject: [PATCH] logging: Fix log filter during initialization The log filter was being ignored on initialization due to the logging instance being initialized before the config instance, so the log filter was set to its default value. This fixes that oversight, along with using descriptive exceptions instead of abort() calls. --- src/common/logging/backend.cpp | 9 +++++---- src/core/core.cpp | 10 +++++++++- src/core/core.h | 7 +------ src/yuzu/main.cpp | 2 +- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 13edda9c9f..949384fd3d 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -152,7 +153,7 @@ public: void EnableForStacktrace() override {} }; -bool initialization_in_progress_suppress_logging = false; +bool initialization_in_progress_suppress_logging = true; /** * Static state as a singleton. @@ -161,17 +162,17 @@ class Impl { public: static Impl& Instance() { if (!instance) { - abort(); + throw std::runtime_error("Using Logging instance before its initialization"); } return *instance; } static void Initialize() { if (instance) { - abort(); + LOG_WARNING(Log, "Reinitializing logging backend"); + return; } using namespace Common::FS; - initialization_in_progress_suppress_logging = true; const auto& log_dir = GetYuzuPath(YuzuPath::LogDir); void(CreateDir(log_dir)); Filter filter; diff --git a/src/core/core.cpp b/src/core/core.cpp index b0dc594d48..5893a86bf0 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -423,9 +424,16 @@ struct System::Impl { System::System() : impl{std::make_unique(*this)} {} System::~System() = default; +System& System::GetInstance() { + if (!s_instance) { + throw std::runtime_error("Using System instance before its initialization"); + } + return *s_instance; +} + void System::InitializeGlobalInstance() { if (s_instance) { - abort(); + throw std::runtime_error("Reinitializing Global System instance."); } s_instance = std::unique_ptr(new System); } diff --git a/src/core/core.h b/src/core/core.h index 65b447a1c8..f9116ebb6a 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -120,12 +120,7 @@ public: * Gets the instance of the System singleton class. * @returns Reference to the instance of the System singleton class. */ - [[deprecated("Use of the global system instance is deprecated")]] static System& GetInstance() { - if (!s_instance) { - abort(); - } - return *s_instance; - } + [[deprecated("Use of the global system instance is deprecated")]] static System& GetInstance(); static void InitializeGlobalInstance(); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 1bae1489f7..e36774cc65 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -192,6 +192,7 @@ GMainWindow::GMainWindow() : input_subsystem{std::make_shared()}, config{std::make_unique()}, vfs{std::make_shared()}, provider{std::make_unique()} { + Common::Log::Initialize(); LoadTranslation(); setAcceptDrops(true); @@ -3381,7 +3382,6 @@ void GMainWindow::SetDiscordEnabled([[maybe_unused]] bool state) { #endif int main(int argc, char* argv[]) { - Common::Log::Initialize(); Common::DetachedTasks detached_tasks; MicroProfileOnThreadCreate("Frontend"); SCOPE_EXIT({ MicroProfileShutdown(); });