-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.8.0
-
None
-
OpenSuSE Leap 42.2, clang 3.9.1, libc++, thread sanitizer
-
fb376e0, ad1b3a49807cdb456698991142da0244c0612a1c
clang's tsan detects that QMetaType::typeName() is racy, and indeed I see no locking in that code.
WARNING: ThreadSanitizer: data race (pid=2303)
Read of size 8 at 0x7fd0db177640 by thread T3:
#0 QMetaType::typeName(int) /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetatype.cpp:843:60 (libQt5Core.so.5+0x0000005d1e91)
#1 typeNameFromTypeInfo(QMetaObject const*, unsigned int) /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetaobject.cpp:170:25 (libQt5Core.so.5+0x0000005c1c7c)
#2 QMetaMethodPrivate::parameterTypes() const /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetaobject.cpp:1737:17 (libQt5Core.so.5+0x0000005cfd0a)
#3 QMetaMethod::parameterTypes() const /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetaobject.cpp:1878:43 (libQt5Core.so.5+0x0000005c60fe)
#4 qDBusParametersForMethod(QMetaMethod const&, QVector<int>&, QString&) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusmisc.cpp:140:40 (libQt5DBus.so.5+0x000000099054)
#5 QDBusConnectionPrivate::findSlot(QObject*, QByteArray const&, QVector<int>&) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusintegrator.cpp:1314:22 (libQt5DBus.so.5+0x0000000363a7)
#6 QDBusConnectionPrivate::prepareHook(QDBusConnectionPrivate::SignalHook&, QString&, QString const&, QString const&, QString const&, QString const&, QStringList const&, QObject*, char const*, int, bool) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusintegrator.cpp:1329:17 (libQt5DBus.so.5+0x000000036575)
#7 QDBusConnectionPrivate::connectSignal(QString const&, QString const&, QString const&, QString const&, QStringList const&, QString const&, QObject*, char const*) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusintegrator.cpp:2205:10 (libQt5DBus.so.5+0x00000003d891)
#8 QDBusConnection::connect(QString const&, QString const&, QString const&, QString const&, QStringList const&, QString const&, QObject*, char const*) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusconnection.cpp:806:15 (libQt5DBus.so.5+0x00000001bd00)
#9 QDBusConnection::connect(QString const&, QString const&, QString const&, QString const&, QObject*, char const*) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusconnection.cpp:728:12 (libQt5DBus.so.5+0x00000001b95f)
Previous write of size 8 at 0x7fd0db177640 by thread T6:
#0 QMetaType::typeName(int) /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetatype.cpp:867:22 (libQt5Core.so.5+0x0000005d28dc)
#1 typeNameFromTypeInfo(QMetaObject const*, unsigned int) /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetaobject.cpp:170:25 (libQt5Core.so.5+0x0000005c1c7c)
#2 QMetaMethodPrivate::parameterTypes() const /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetaobject.cpp:1737:17 (libQt5Core.so.5+0x0000005cfd0a)
#3 QMetaMethod::parameterTypes() const /d/qt/5/kdab/qtbase-dev/src/corelib/kernel/qmetaobject.cpp:1878:43 (libQt5Core.so.5+0x0000005c60fe)
#4 qDBusParametersForMethod(QMetaMethod const&, QVector<int>&, QString&) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusmisc.cpp:140:40 (libQt5DBus.so.5+0x000000099054)
#5 QDBusConnectionPrivate::findSlot(QObject*, QByteArray const&, QVector<int>&) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusintegrator.cpp:1314:22 (libQt5DBus.so.5+0x0000000363a7)
#6 QDBusConnectionPrivate::prepareHook(QDBusConnectionPrivate::SignalHook&, QString&, QString const&, QString const&, QString const&, QString const&, QStringList const&, QObject*, char const*, int, bool) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusintegrator.cpp:1329:17 (libQt5DBus.so.5+0x000000036575)
#7 QDBusConnectionPrivate::connectSignal(QString const&, QString const&, QString const&, QString const&, QStringList const&, QString const&, QObject*, char const*) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusintegrator.cpp:2205:10 (libQt5DBus.so.5+0x00000003d891)
#8 QDBusConnection::connect(QString const&, QString const&, QString const&, QString const&, QStringList const&, QString const&, QObject*, char const*) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusconnection.cpp:806:15 (libQt5DBus.so.5+0x00000001bd00)
#9 QDBusConnection::connect(QString const&, QString const&, QString const&, QString const&, QObject*, char const*) /d/qt/5/kdab/qtbase-dev/src/dbus/qdbusconnection.cpp:728:12 (libQt5DBus.so.5+0x00000001b95f)