From f1fa59c5351877ef4701df28b7e988f1a2e7c555 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 14 Dec 2020 23:03:55 +0100 Subject: [PATCH] Fix initialisation of the global logging category variable Just accessing the raw variable doesn't guarantee the order of construction and may lead to crashes in certain constellations. --- libnymea-core/nymeacore.cpp | 2 +- libnymea/integrations/integrationplugin.cpp | 3 +++ libnymea/loggingcategories.cpp | 6 ++++-- libnymea/loggingcategories.h | 5 ++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/libnymea-core/nymeacore.cpp b/libnymea-core/nymeacore.cpp index 48c144c1..0f3b42c9 100644 --- a/libnymea-core/nymeacore.cpp +++ b/libnymea-core/nymeacore.cpp @@ -601,7 +601,7 @@ QStringList NymeaCore::getAvailableLanguages() QStringList NymeaCore::loggingFilters() { - return s_nymeaLoggingCategories; + return nymeaLoggingCategories(); } QStringList NymeaCore::loggingFiltersPlugins() diff --git a/libnymea/integrations/integrationplugin.cpp b/libnymea/integrations/integrationplugin.cpp index 75923321..f034bc05 100644 --- a/libnymea/integrations/integrationplugin.cpp +++ b/libnymea/integrations/integrationplugin.cpp @@ -100,6 +100,9 @@ /*! IntegrationPlugin constructor. IntegrationPlugins will be instantiated by the system. This should never be called manually by a plugin implementation. */ + +NYMEA_LOGGING_CATEGORY(dcIntegrations, "Integrations") + IntegrationPlugin::IntegrationPlugin(QObject *parent): QObject(parent) { diff --git a/libnymea/loggingcategories.cpp b/libnymea/loggingcategories.cpp index 1f1fe6ab..fc807fb8 100644 --- a/libnymea/loggingcategories.cpp +++ b/libnymea/loggingcategories.cpp @@ -34,10 +34,12 @@ #include #include -QStringList s_nymeaLoggingCategories; +QStringList& nymeaLoggingCategories() { + static QStringList _nymeaLoggingCategories; + return _nymeaLoggingCategories; +} // FIXME: Those should eventually disappear from here -NYMEA_LOGGING_CATEGORY(dcIntegrations, "Integrations"); NYMEA_LOGGING_CATEGORY(dcThing, "Thing") NYMEA_LOGGING_CATEGORY(dcThingManager, "ThingManager") NYMEA_LOGGING_CATEGORY(dcSystem, "System") diff --git a/libnymea/loggingcategories.h b/libnymea/loggingcategories.h index fdb991a2..1fc74cec 100644 --- a/libnymea/loggingcategories.h +++ b/libnymea/loggingcategories.h @@ -34,13 +34,12 @@ #include #include -extern QStringList s_nymeaLoggingCategories; - +QStringList& nymeaLoggingCategories(); #define NYMEA_LOGGING_CATEGORY(name, string) \ class NymeaLoggingCategory##name: public QLoggingCategory { \ public: \ - NymeaLoggingCategory##name(): QLoggingCategory(string) { s_nymeaLoggingCategories.append(string); } \ + NymeaLoggingCategory##name(): QLoggingCategory(string) { nymeaLoggingCategories().append(string); } \ }; \ static NymeaLoggingCategory##name s_##name; \ const QLoggingCategory &name() \