-
Bug
-
Resolution: Done
-
P1: Critical
-
5.12.0
-
linux kernel 4.20
archlinux
-
-
fe37c2667e (qt/qtdeclarative/dev) fe37c2667e (qt/tqtc-qtdeclarative/dev) 9f7f1e2a2e (qt/qtdeclarative/6.3) 9f7f1e2a2e (qt/tqtc-qtdeclarative/6.3)
The code below crashes sporadically with a SEGFAULT in qt release version (~one out of seven runs failes).
In debug version, the program fails due to asserts.
#include <QThread> #include <QCoreApplication> #include <QtQml/QQmlEngine> #include <QtQml/QQmlComponent> #include <atomic> int main(int argc, char *argv[]) { std::atomic<int> runningThreads{3}; QCoreApplication a(argc, argv); for(int i=0; i<3; ++i){ auto thread = new QThread; thread->moveToThread(thread); thread->start(); // used to exit application after threads done QObject::connect(thread, &QThread::finished, [&]{ if(--runningThreads == 0) QCoreApplication::exit(); }); QMetaObject::invokeMethod(thread, [thread]{ auto qmlEngine = new QQmlEngine(thread); auto component = new QQmlComponent(qmlEngine, thread); component->setData(QByteArray{"import QtQuick 2.0\nQtObject {}\n"}, {"Script"}); thread->quit(); }, Qt::QueuedConnection); } return a.exec(); }
We encountered multiple assert failures:
ASSERT failure in QArrayData::deallocate: "Static data can not be deleted", file tools/qarraydata.cpp, line 166
stacktrace:
#0 0x00007fac8acc2d7f in raise () from /usr/lib/libc.so.6
#1 0x00007fac8acad672 in abort () from /usr/lib/libc.so.6
#2 0x00007fac8b25e236 in ?? () from /usr/lib/libQt5Core.so.5
#3 0x00007fac8b25a330 in QMessageLogger::fatal(char const*, ...) const () from /usr/lib/libQt5Core.so.5
#4 0x00007fac8b251471 in qt_assert_x(char const*, char const*, char const*, int) () from /usr/lib/libQt5Core.so.5
#5 0x00007fac8b27db90 in QArrayData::deallocate(QArrayData*, unsigned long, unsigned long) () from /usr/lib/libQt5Core.so.5
#6 0x00007fac8bb9a973 in QTypedArrayData<char>::deallocate (data=0x7fac6c0068b0) at /usr/include/qt/QtCore/qarraydata.h:239
#7 0x00007fac8bb99ee1 in QByteArray::~QByteArray (this=0x7fac855e6ea0, __in_chrg=<optimized out>) at /usr/include/qt/QtCore/qbytearray.h:476
#8 0x00007fac8bebc3ce in QQmlPropertyCache::checksum (this=0x7fac7004c8b0, ok=0x7fac855e6f37)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmlpropertycache.cpp:1474
#9 0x00007fac8bebc31d in QQmlPropertyCache::checksum (this=0x7fac7004cce0, ok=0x7fac855e6f37)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmlpropertycache.cpp:1464
#10 0x00007fac8bbe1248 in QV4::CompiledData::ResolvedTypeReference::addToHash (this=0x7fac7004c880, hash=0x7fac855e7108, engine=0x7fac78004ab0)
at qtdeclarative-everywhere-src-5.12.0/src/qml/compiler/qv4compileddata.cpp:831
#11 0x00007fac8bbe143e in QV4::CompiledData::ResolvedTypeReferenceMap::addToHash (this=0x7fac7004cbf8, hash=0x7fac855e7108, engine=0x7fac78004ab0)
at qtdeclarative-everywhere-src-5.12.0/src/qml/compiler/qv4compileddata.cpp:863
#12 0x00007fac8be8ee75 in QQmlTypeData::<lambda(QCryptographicHash*)>::operator()(QCryptographicHash *) const (__closure=0x7fac7004cbf0, hash=0x7fac855e7108)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:2352
#13 0x00007fac8be96633 in std::_Function_handler<bool(QCryptographicHash*), QQmlTypeData::done()::<lambda(QCryptographicHash*)> >::_M_invoke(const std::_Any_data &, QCryptographicHash *&&) (__functor=...,
__args#0=@0x7fac855e7010: 0x7fac855e7108) at /usr/include/c++/8.2.1/bits/std_function.h:282
#14 0x00007fac8bbe50ed in std::function<bool (QCryptographicHash*)>::operator()(QCryptographicHash*) const (this=0x7fac855e7690, __args#0=0x7fac855e7108) at /usr/include/c++/8.2.1/bits/std_function.h:687
#15 0x00007fac8bc2c755 in QmlIR::QmlUnitGenerator::generate(QmlIR::Document&, std::function<bool (QCryptographicHash*)> const&) (this=0x7fac855e7300, output=..., dependencyHasher=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/compiler/qqmlirbuilder.cpp:1591
#16 0x00007fac8bc63c35 in QQmlTypeCompiler::compile (this=0x7fac855e7500) at qtdeclarative-everywhere-src-5.12.0/src/qml/compiler/qqmltypecompiler.cpp:161
#17 0x00007fac8be91a8b in QQmlTypeData::compile(QQmlRefPointer<QQmlTypeNameCache> const&, QV4::CompiledData::ResolvedTypeReferenceMap const&, std::function<bool (QCryptographicHash*)> const&) (
this=0x7fac7803ecd0, typeNameCache=..., resolvedTypeCache=..., dependencyHasher=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:2650
#18 0x00007fac8be8fc27 in QQmlTypeData::done (this=0x7fac7803ecd0) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:2368
#19 0x00007fac8be88270 in QQmlDataBlob::tryDone (this=0x7fac7803ecd0) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:675
#20 0x00007fac8be89d4f in QQmlTypeLoader::setData (this=0x7fac78004c20, blob=0x7fac7803ecd0, d=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:1312
#21 0x00007fac8be89b0c in QQmlTypeLoader::setData (this=0x7fac78004c20, blob=0x7fac7803ecd0, data=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:1284
#22 0x00007fac8be890f5 in QQmlTypeLoader::loadWithStaticDataThread (this=0x7fac78004c20, blob=0x7fac7803ecd0, data=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:1120
#23 0x00007fac8be88cab in QQmlTypeLoaderThread::loadWithStaticDataThread (this=0x7fac78004e90, b=0x7fac7803ecd0, d=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:911
#24 0x00007fac8be9b312 in QQmlThread::callMethodInThread<QQmlDataBlob*, QByteArray, QQmlDataBlob*, QByteArray const&, QQmlTypeLoaderThread>(void (QQmlTypeLoaderThread::*)(QQmlDataBlob*, QByteArray const&), QQmlDataBlob* const&, QByteArray const&)::I::call(QQmlThread*) (this=0x7fac7803ef20, thread=0x7fac78004e90)
at qtdeclarative-everywhere-src-5.12.0/include/QtQml/5.12.0/QtQml/private/../../../../../src/qml/qml/ftw/qqmlthread_p.h:180
#25 0x00007fac8bf27be5 in QQmlThreadPrivate::threadEvent (this=0x7fac780050b0) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/ftw/qqmlthread.cpp:197
#26 0x00007fac8bf27966 in QQmlThreadPrivate::event (this=0x7fac780050b0, e=0x7fac7803ef60)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/ftw/qqmlthread.cpp:135
#27 0x00007fac8b4b8b96 in QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#28 0x00007fac8b4b87c5 in ?? () from /usr/lib/libQt5Core.so.5
#29 0x00007fac8b4b8728 in QCoreApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#30 0x00007fac8b4b8649 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#31 0x00007fac8b4b903a in QCoreApplication::sendEvent(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#32 0x00007fac8b4b9c63 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5
#33 0x00007fac8b4b95c2 in QCoreApplication::sendPostedEvents(QObject*, int) () from /usr/lib/libQt5Core.so.5
#34 0x00007fac8b54802d in ?? () from /usr/lib/libQt5Core.so.5
#35 0x00007fac88674a2f in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#36 0x00007fac886765e9 in ?? () from /usr/lib/libglib-2.0.so.0
#37 0x00007fac8867662e in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#38 0x00007fac8b5487fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#39 0x00007fac8b4b4eb3 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#40 0x00007fac8b4b51ed in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#41 0x00007fac8b26524f in QThread::exec() () from /usr/lib/libQt5Core.so.5
#42 0x00007fac8bf279d7 in QQmlThreadPrivate::run (this=0x7fac780050b0) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/ftw/qqmlthread.cpp:148
#43 0x00007fac8b267fc4 in ?? () from /usr/lib/libQt5Core.so.5
#44 0x00007fac8b186a9d in start_thread () from /usr/lib/libpthread.so.0
#45 0x00007fac8ad86b23 in clone () from /usr/lib/libc.so.6
ASSERT: "data->notFullyResolved()" in file qqmlpropertycache.cpp, line 670
stacktrace:
#0 0x00007f887c49ed7f in raise () from /usr/lib/libc.so.6
#1 0x00007f887c489672 in abort () from /usr/lib/libc.so.6
#2 0x00007f887ca3a236 in ?? () from /usr/lib/libQt5Core.so.5
#3 0x00007f887ca36330 in QMessageLogger::fatal(char const*, ...) const () from /usr/lib/libQt5Core.so.5
#4 0x00007f887ca2d406 in qt_assert(char const*, char const*, int) () from /usr/lib/libQt5Core.so.5
#5 0x00007f887d695ff8 in QQmlPropertyCache::resolve (this=0x7f885c04c220, data=0x7f885c04f068)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmlpropertycache.cpp:670
#6 0x00007f887d40d558 in QQmlPropertyCache::ensureResolved (this=0x7f885c04c220, p=0x7f885c04f068)
at qtdeclarative-everywhere-src-5.12.0/include/QtQml/5.12.0/QtQml/private/../../../../../src/qml/qml/qqmlpropertycache_p.h:728
#7 0x00007f887d696961 in QQmlPropertyCache::findProperty (this=0x7f885c04c220, it=..., vmemo=0x0, context=0x0)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmlpropertycache.cpp:849
#8 0x00007f887d6966cf in QQmlPropertyCache::findProperty (this=0x7f885c04c220, it=..., object=0x0, context=0x0)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmlpropertycache.cpp:782
#9 0x00007f887d411329 in QQmlPropertyCache::property<QString> (this=0x7f885c04c220, key=..., object=0x0, context=0x0)
at qtdeclarative-everywhere-src-5.12.0/include/QtQml/5.12.0/QtQml/private/../../../../../src/qml/qml/qqmlpropertycache_p.h:433
#10 0x00007f887d694d61 in QQmlPropertyCache::defaultProperty (this=0x7f885c04c220)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmlpropertycache.cpp:433
#11 0x00007f887d443228 in QQmlAliasAnnotator::annotateBindingsToAliases (this=0x7f88775c4330)
at qtdeclarative-everywhere-src-5.12.0/src/qml/compiler/qqmltypecompiler.cpp:731
#12 0x00007f887d43f8a7 in QQmlTypeCompiler::compile (this=0x7f88775c4500) at qtdeclarative-everywhere-src-5.12.0/src/qml/compiler/qqmltypecompiler.cpp:117
#13 0x00007f887d66da8b in QQmlTypeData::compile(QQmlRefPointer<QQmlTypeNameCache> const&, QV4::CompiledData::ResolvedTypeReferenceMap const&, std::function<bool (QCryptographicHash*)> const&) (
this=0x7f886803cb50, typeNameCache=..., resolvedTypeCache=..., dependencyHasher=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:2650
#14 0x00007f887d66bc27 in QQmlTypeData::done (this=0x7f886803cb50) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:2368
#15 0x00007f887d664270 in QQmlDataBlob::tryDone (this=0x7f886803cb50) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:675
#16 0x00007f887d665d4f in QQmlTypeLoader::setData (this=0x7f8868004c20, blob=0x7f886803cb50, d=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:1312
#17 0x00007f887d665b0c in QQmlTypeLoader::setData (this=0x7f8868004c20, blob=0x7f886803cb50, data=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:1284
#18 0x00007f887d6650f5 in QQmlTypeLoader::loadWithStaticDataThread (this=0x7f8868004c20, blob=0x7f886803cb50, data=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:1120
#19 0x00007f887d664cab in QQmlTypeLoaderThread::loadWithStaticDataThread (this=0x7f8868004e90, b=0x7f886803cb50, d=...)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/qqmltypeloader.cpp:911
#20 0x00007f887d677312 in QQmlThread::callMethodInThread<QQmlDataBlob*, QByteArray, QQmlDataBlob*, QByteArray const&, QQmlTypeLoaderThread>(void (QQmlTypeLoaderThread::*)(QQmlDataBlob*, QByteArray const&), QQmlDataBlob* const&, QByteArray const&)::I::call(QQmlThread*) (this=0x7f886803ccb0, thread=0x7f8868004e90)
at qtdeclarative-everywhere-src-5.12.0/include/QtQml/5.12.0/QtQml/private/../../../../../src/qml/qml/ftw/qqmlthread_p.h:180
#21 0x00007f887d703be5 in QQmlThreadPrivate::threadEvent (this=0x7f8868005150) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/ftw/qqmlthread.cpp:197
#22 0x00007f887d703966 in QQmlThreadPrivate::event (this=0x7f8868005150, e=0x7f886803ccf0)
at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/ftw/qqmlthread.cpp:135
#23 0x00007f887cc94b96 in QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#24 0x00007f887cc947c5 in ?? () from /usr/lib/libQt5Core.so.5
#25 0x00007f887cc94728 in QCoreApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#26 0x00007f887cc94649 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#27 0x00007f887cc9503a in QCoreApplication::sendEvent(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#28 0x00007f887cc95c63 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5
#29 0x00007f887cc955c2 in QCoreApplication::sendPostedEvents(QObject*, int) () from /usr/lib/libQt5Core.so.5
#30 0x00007f887cd2402d in ?? () from /usr/lib/libQt5Core.so.5
#31 0x00007f8879e50a2f in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#32 0x00007f8879e525e9 in ?? () from /usr/lib/libglib-2.0.so.0
#33 0x00007f8879e5262e in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#34 0x00007f887cd247fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#35 0x00007f887cc90eb3 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#36 0x00007f887cc911ed in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#37 0x00007f887ca4124f in QThread::exec() () from /usr/lib/libQt5Core.so.5
#38 0x00007f887d7039d7 in QQmlThreadPrivate::run (this=0x7f8868005150) at qtdeclarative-everywhere-src-5.12.0/src/qml/qml/ftw/qqmlthread.cpp:148
#39 0x00007f887ca43fc4 in ?? () from /usr/lib/libQt5Core.so.5
#40 0x00007f887c962a9d in start_thread () from /usr/lib/libpthread.so.0
#41 0x00007f887c562b23 in clone () from /usr/lib/libc.so.6
- is duplicated by
-
QTBUG-75007 QML Singleton creation in multi-threaded application causes errors
-
- Reported
-
- relates to
-
QTBUG-99469 Crashes in QJSEngine when used from multiple threads
-
- Closed
-
| For Gerrit Dashboard: QTBUG-73271 | ||||||
|---|---|---|---|---|---|---|
| # | Subject | Branch | Project | Status | CR | V |
| 251156,1 | QQmlTypeCompiler: Lock metaTypes when compiling | 5.12 | qt/qtdeclarative | Status: ABANDONED | -1 | 0 |
| 251359,8 | Eliminate excessive friendlyness of QQmlType | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 251781,3 | QQmlMetaType: Only provide access to the singleton through the lock | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 251788,1 | Protect type registration failures with metatype mutex | dev | qt/qtdeclarative | Status: ABANDONED | +2 | 0 |
| 252156,3 | Tighten the interface of QQmlTypeModule | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 252157,3 | Move registration functions from qqmlimport.cpp to qqmlmetatype.cpp | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 252515,3 | Add an abstraction for thread safe lazy loaded types | dev | qt/qtdeclarative | Status: DEFERRED | 0 | 0 |
| 399047,5 | ExecutionEngine: Move initialization of statics into separate method | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 399120,3 | QQmlPropertyCache: Store checksums in type loader | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 399274,2 | ExecutionEngine: Move initialization of statics into separate method | 6.3 | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 399764,4 | QQmlPropertyCache: Store checksums in type loader | 6.3 | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 399801,2 | QtQml: Restore immutability of QQmlPropertyCache | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 399809,5 | Use const QQmlPropertyCache wherever possible | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 399985,3 | QML: Add more safety to QQmlPropertyCache usages | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
| 400270,3 | QtQml: Restore immutability of QQmlPropertyCache | 6.3 | qt/qtdeclarative | Status: MERGED | +2 | 0 |