summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2021-07-09 09:41:49 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2021-08-04 19:31:52 +0200
commit5889985c8c8e8cc676de4480ad95979287860b96 (patch)
tree9771d6ec167b8455561495e5204b42c498ce001c /src/corelib/thread
parent3f0a32aeb50acf17302e44dcffc3210f199de6eb (diff)
QProperty: Only try to avoid TLS access if currentThreadId is faster
We will not gain anything if we have to do multiple function calls to obtain the thread id. Therefore we introduce a macro to signal that we have a fast implementation of currentThreadId, and only use the function if it is defined. Pick-to: 6.2 Change-Id: I3347489ea91992896bb753b796ae26e391c2c99c Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/thread')
-rw-r--r--src/corelib/thread/qthread.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h
index 51cd3eadcc..e48354dedb 100644
--- a/src/corelib/thread/qthread.h
+++ b/src/corelib/thread/qthread.h
@@ -186,6 +186,8 @@ QThread *QThread::create(Function &&f, Args &&... args)
*/
inline Qt::HANDLE QThread::currentThreadId() noexcept
{
+ // define is undefed if we have to fall back to currentThreadIdImpl
+#define QT_HAS_FAST_CURRENT_THREAD_ID
Qt::HANDLE tid; // typedef to void*
static_assert(sizeof(tid) == sizeof(void*));
// See https://akkadia.org/drepper/tls.pdf for x86 ABI
@@ -219,6 +221,7 @@ inline Qt::HANDLE QThread::currentThreadId() noexcept
// Then read the thread ID
tid = *reinterpret_cast<Qt::HANDLE *>(tib + 0x24);
#else
+#undef QT_HAS_FAST_CURRENT_THREAD_ID
tid = currentThreadIdImpl();
#endif
return tid;