Revert "Initialize QLoggingRegistry rules on first use, not qApp construction"

This reverts commit 47cc9e23a313d67a4a3107242f205d2473842021.

We use QCoreApplication::applicationDirPath in the logging initialization to find
a possible qtlogging.ini file. Because QCoreApplication::applicationDirPath requires
a QCoreApplication instance this leads to a qWarning, which in turn leads to a
recursive call to the logging initialization, and in turn to a recursive mutex deadlock.

Task-number: QTCREATORBUG-18031
Change-Id: Ic75e1e8c062eb647991725378489bf87c9648cca
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
Tor Arne Vestbø 2017-04-19 15:54:47 +02:00 committed by Giuseppe D'Angelo
parent 8043202114
commit 924b02aecb
4 changed files with 6 additions and 18 deletions

View File

@ -255,7 +255,6 @@ void QLoggingSettingsParser::parseNextLine(QStringRef line)
QLoggingRegistry::QLoggingRegistry()
: categoryFilter(defaultCategoryFilter)
{
init();
}
static bool qtLoggingDebug()

View File

@ -113,6 +113,8 @@ class Q_AUTOTEST_EXPORT QLoggingRegistry
public:
QLoggingRegistry();
void init();
void registerCategory(QLoggingCategory *category, QtMsgType enableForLevel);
void unregisterCategory(QLoggingCategory *category);
@ -124,7 +126,6 @@ public:
static QLoggingRegistry *instance();
private:
void init();
void updateRules();
static void defaultCategoryFilter(QLoggingCategory *category);

View File

@ -771,6 +771,8 @@ void QCoreApplicationPrivate::init()
if (!coreappdata()->applicationVersionSet)
coreappdata()->applicationVersion = appVersion();
QLoggingRegistry::instance()->init();
#if QT_CONFIG(library)
// Reset the lib paths, so that they will be recomputed, taking the availability of argv[0]
// into account. If necessary, recompute right away and replay the manual changes on top of the

View File

@ -197,23 +197,9 @@ private slots:
// Check whether QT_LOGGING_CONF is picked up from environment
//
Q_ASSERT(!qApp);
qputenv("QT_LOGGING_RULES", "qt.foo.bar=true");
qputenv("QT_LOGGING_CONF", QFINDTESTDATA("qtlogging.ini").toLocal8Bit());
QLoggingRegistry registry;
QCOMPARE(registry.apiRules.size(), 0);
QCOMPARE(registry.configRules.size(), 0);
QCOMPARE(registry.envRules.size(), 1);
QCOMPARE(registry.rules.size(), 1);
QLoggingCategory qtEnabledByLoggingRule("qt.foo.bar");
QCOMPARE(qtEnabledByLoggingRule.isDebugEnabled(), true);
QLoggingCategory qtDisabledByDefault("qt.foo.baz");
QCOMPARE(qtDisabledByDefault.isDebugEnabled(), false);
qunsetenv("QT_LOGGING_RULES");
qputenv("QT_LOGGING_CONF", QFINDTESTDATA("qtlogging.ini").toLocal8Bit());
registry.init();
QCOMPARE(registry.apiRules.size(), 0);
@ -318,6 +304,6 @@ private slots:
}
};
QTEST_APPLESS_MAIN(tst_QLoggingRegistry)
QTEST_MAIN(tst_QLoggingRegistry)
#include "tst_qloggingregistry.moc"