yuzu-emu
/
yuzu
Archived
1
0
Fork 0

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.
This commit is contained in:
ameerj 2021-08-24 01:32:38 -04:00
parent bed0c3c92a
commit 84b4ac5729
4 changed files with 16 additions and 12 deletions

View File

@ -5,6 +5,7 @@
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
#include <climits> #include <climits>
#include <exception>
#include <thread> #include <thread>
#include <vector> #include <vector>
@ -152,7 +153,7 @@ public:
void EnableForStacktrace() override {} void EnableForStacktrace() override {}
}; };
bool initialization_in_progress_suppress_logging = false; bool initialization_in_progress_suppress_logging = true;
/** /**
* Static state as a singleton. * Static state as a singleton.
@ -161,17 +162,17 @@ class Impl {
public: public:
static Impl& Instance() { static Impl& Instance() {
if (!instance) { if (!instance) {
abort(); throw std::runtime_error("Using Logging instance before its initialization");
} }
return *instance; return *instance;
} }
static void Initialize() { static void Initialize() {
if (instance) { if (instance) {
abort(); LOG_WARNING(Log, "Reinitializing logging backend");
return;
} }
using namespace Common::FS; using namespace Common::FS;
initialization_in_progress_suppress_logging = true;
const auto& log_dir = GetYuzuPath(YuzuPath::LogDir); const auto& log_dir = GetYuzuPath(YuzuPath::LogDir);
void(CreateDir(log_dir)); void(CreateDir(log_dir));
Filter filter; Filter filter;

View File

@ -4,6 +4,7 @@
#include <array> #include <array>
#include <atomic> #include <atomic>
#include <exception>
#include <memory> #include <memory>
#include <utility> #include <utility>
@ -423,9 +424,16 @@ struct System::Impl {
System::System() : impl{std::make_unique<Impl>(*this)} {} System::System() : impl{std::make_unique<Impl>(*this)} {}
System::~System() = default; 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() { void System::InitializeGlobalInstance() {
if (s_instance) { if (s_instance) {
abort(); throw std::runtime_error("Reinitializing Global System instance.");
} }
s_instance = std::unique_ptr<System>(new System); s_instance = std::unique_ptr<System>(new System);
} }

View File

@ -120,12 +120,7 @@ public:
* Gets the instance of the System singleton class. * Gets the instance of the System singleton class.
* @returns Reference to 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() { [[deprecated("Use of the global system instance is deprecated")]] static System& GetInstance();
if (!s_instance) {
abort();
}
return *s_instance;
}
static void InitializeGlobalInstance(); static void InitializeGlobalInstance();

View File

@ -192,6 +192,7 @@ GMainWindow::GMainWindow()
: input_subsystem{std::make_shared<InputCommon::InputSubsystem>()}, : input_subsystem{std::make_shared<InputCommon::InputSubsystem>()},
config{std::make_unique<Config>()}, vfs{std::make_shared<FileSys::RealVfsFilesystem>()}, config{std::make_unique<Config>()}, vfs{std::make_shared<FileSys::RealVfsFilesystem>()},
provider{std::make_unique<FileSys::ManualContentProvider>()} { provider{std::make_unique<FileSys::ManualContentProvider>()} {
Common::Log::Initialize();
LoadTranslation(); LoadTranslation();
setAcceptDrops(true); setAcceptDrops(true);
@ -3381,7 +3382,6 @@ void GMainWindow::SetDiscordEnabled([[maybe_unused]] bool state) {
#endif #endif
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
Common::Log::Initialize();
Common::DetachedTasks detached_tasks; Common::DetachedTasks detached_tasks;
MicroProfileOnThreadCreate("Frontend"); MicroProfileOnThreadCreate("Frontend");
SCOPE_EXIT({ MicroProfileShutdown(); }); SCOPE_EXIT({ MicroProfileShutdown(); });