Details
-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.8.0
-
None
-
OpenSuSE Leap 42.2, clang 3.9.1, libc++, thread sanitizer
-
fb376e0, ad1b3a49807cdb456698991142da0244c0612a1c
Description
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)
Attachments
For Gerrit Dashboard: QTBUG-58851 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
185501,5 | Remove the name cache from QMetaType::typeName | 5.8 | qt/qtbase | Status: MERGED | +2 | 0 |
185655,4 | Reintroduce a directed QMetaType::typeName array | 5.9 | qt/qtbase | Status: MERGED | +2 | 0 |
185907,4 | Remove the name cache from QMetaType::typeName | 5.6 | qt/qtbase | Status: MERGED | +2 | 0 |