path: root/src/corelib/kernel/qcoreapplication.cpp
diff options
authorOliver Wolff <>2018-09-10 12:19:09 +0200
committerOliver Wolff <>2018-10-08 05:34:28 +0000
commit29208fa07c1b9f656ea2535696828385b7832226 (patch)
treee784dcdd1896f836d81ebeb4f6eb67426923b9f9 /src/corelib/kernel/qcoreapplication.cpp
parent05b8ba51550127c85cd2db5cb819b695b56c57ce (diff)
winrt: Explicitly set main thread in QCoreApplication's constructor
For winrt we cannot rely on the fact, that QThread::current will be called from the correct thread for the first time. The application's main entry point creates a suspended thread and starts it right afterwards. At that moment, other functionality (QLoggingRegistry for example) might have called QThread::current, which set the wrong thread as the main thread. In order to avoid this situation, the main thread is explicitly set in QCoreApplication's constructor. Task-number: QTBUG-66418 Change-Id: I8b6347357a80eb395ae758bd3d420adef0826751 Reviewed-by: Friedemann Kleint <> Reviewed-by: Simon Hausmann <>
Diffstat (limited to 'src/corelib/kernel/qcoreapplication.cpp')
1 files changed, 4 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 1350a7aa94..463e30e1c3 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -482,6 +482,10 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
qFatal("FATAL: The application binary appears to be running setuid, this is a security hole.");
# endif // Q_OS_UNIX
+#ifdef Q_OS_WINRT
+ QThreadData::setMainThread();
QThread *cur = QThread::currentThread(); // note: this may end up setting theMainThread!
if (cur != theMainThread)
qWarning("WARNING: QApplication was not created in the main() thread.");