[Interest] TSAN findings in a simple QApplication/QMetaObject::invokeMethod example
Thiago Macieira
thiago.macieira at intel.com
Thu Nov 3 17:34:08 CET 2022
On Thursday, 3 November 2022 03:21:05 PDT Dennis Luehring wrote:
> WARNING: ThreadSanitizer: data race (pid=5882)
> Read of size 8 at 0x7b0c00002178 by thread T1:
> #0 memcpy <null> (libtsan.so.2+0x5e806)
> #1 QVector<QPostEvent>::realloc(int,
> QFlags<QArrayData::AllocationOption>) <null> (libQt5Core.so.5+0x2af42c)
>
> Previous write of size 8 at 0x7b0c00002178 by main thread:
> #0 malloc <null> (libtsan.so.2+0x3f618)
> #1 QArrayData::allocate(unsigned long, unsigned long, unsigned
> long, QFlags<QArrayData::AllocationOption>) <null> (libQt5Core.so.5+0xf34f1)
> #2 main
> /home/linux/dev/project/test/qt_tsan_tests_dev/qt_tsan_tests/main.cpp:9
> (qt_tsan_tests+0x402eed)
Actually this SEEMS to indicate that there's a race condition in the
QPostEventList (which is a QVector), but I dobut that TSan is capable of
noticing the QMutex lock, because on Linux those are inline when uncontended.
Qt 6.4 has TSan annotations for those, but you must build Qt itself with TSan
for them to apply to the post event list inside QtCore.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Cloud Software Architect - Intel DCAI Cloud Engineering
More information about the Interest
mailing list