Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
5.15.12
-
None
Description
I have faced with a heisenbug(async nature?) which time-to-time leads to SIGABRTs because of ASSERTs during QQmlComponent::create(QQmlIncubator&, QtQml::qmlContext(..)):
ASSERT: "!Chunk::testBit(c->extendsBitmap, h - c->realBase())" in file ../../include/QtQml/5.15.2/QtQml/private/../../../../../src/qml/memory/qv4heap_p.h, line 127
Call stack:
Exception Type: EXC_CRASH (SIGABRT) ... Thread 15 Crashed:: TestThread_QML_53 0 0x1084179a8 ??? 1 0x10d11b33c ??? 2 0x1160f5ee6 pthread_kill + 263 3 0x1160b9684 abort + 123 4 0x10292f328 qt_message_fatal(QtMsgType, QMessageLogContext const&, QString const&) + 24 (qlogging.cpp:1914) 5 0x102cee1e1 QMessageLogger::fatal(char const*, ...) const + 433 (qlogging.cpp:893) 6 0x102ced924 qt_assert(char const*, char const*, int) + 84 (qglobal.cpp:3358) 7 0x1024a3638 QV4::Heap::Base::inUse() const + 120 (qv4heap_p.h:127) 8 0x101cd5ead QV4::Heap::Pointer<QV4::Heap::InternalClass*, 0ul>::base() + 29 (qv4heap_p.h:199) 9 0x101cd5e2c QV4::Heap::Pointer<QV4::Heap::InternalClass*, 0ul>::set(QV4::EngineBase*, QV4::Heap::InternalClass*) + 44 (qv4heap_p.h:79) 10 0x1024b5e72 QV4::String::Data* QV4::MemoryManager::allocWithStringData<QV4::String, QString>(unsigned long, QString) + 98 (qv4mm_p.h:218) 11 0x1024b273f QV4::ExecutionEngine::newString(QString const&) + 95 (qv4engine.cpp:894) 12 0x1025b3eac QV4::ExecutableCompilationUnit::linkToEngine(QV4::ExecutionEngine*) + 268 (qv4executablecompilationunit.cpp:149) 13 0x10273d003 QQmlObjectCreator::init(QQmlContextData*) + 179 (qqmlobjectcreator.cpp:116) 14 0x10273cd2b QQmlObjectCreator::QQmlObjectCreator(QQmlContextData*, QQmlRefPointer<QV4::ExecutableCompilationUnit> const&, QQmlContextData*, QQmlIncubatorPrivate*) + 235 (qqmlobjectcreator.cpp:79) 15 0x10273d355 QQmlObjectCreator::QQmlObjectCreator(QQmlContextData*, QQmlRefPointer<QV4::ExecutableCompilationUnit> const&, QQmlContextData*, QQmlIncubatorPrivate*) + 53 (qqmlobjectcreator.cpp:78) 16 0x1026aa0ca QQmlComponent::create(QQmlIncubator&, QQmlContext*, QQmlContext*) + 618 (qqmlcomponent.cpp:1175) ...
I am using "qt.qml.*=true" as a filter rule to get the most complete log but now have just some GC details...:
[D] void QV4::MemoryManager::runGC()> ========== GC ========== (memory/qv4mm.cpp:1064) [D] void QV4::MemoryManager::runGC()> Triggered by alloc request of 2 slots. (memory/qv4mm.cpp:1066) [D] void QV4::MemoryManager::runGC()> Allocations since last GC 1588 (memory/qv4mm.cpp:1067) [D] void QV4::MemoryManager::runGC()> Allocated 258048 bytes in 2 chunks (memory/qv4mm.cpp:1071) [D] void QV4::MemoryManager::runGC()> Fragmented memory before GC 33376 (memory/qv4mm.cpp:1072) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for Block allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 0 (memory/qv4mm.cpp:1033) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for InternalClass allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 0 (memory/qv4mm.cpp:1033) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for Block allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 64 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 47 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 9 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 19 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 3 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 7 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 16 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 35328 (memory/qv4mm.cpp:1033) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for InternalClasss allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 9 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 23 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 115456 (memory/qv4mm.cpp:1033) [D] void QV4::MemoryManager::runGC()> Marked object in 338 us. (memory/qv4mm.cpp:1094) [D] void QV4::MemoryManager::runGC()> 9028 objects marked (memory/qv4mm.cpp:1095) [D] void QV4::MemoryManager::runGC()> Sweeped object in 309 us. (memory/qv4mm.cpp:1096) [D] void QV4::MemoryManager::runGC()> Used memory before GC: 224672 (memory/qv4mm.cpp:1111) [D] void QV4::MemoryManager::runGC()> Used memory after GC: 107264 (memory/qv4mm.cpp:1112) [D] void QV4::MemoryManager::runGC()> Freed up bytes : 117408 (memory/qv4mm.cpp:1113) [D] void QV4::MemoryManager::runGC()> Freed up chunks : 0 (memory/qv4mm.cpp:1114) [D] void QV4::MemoryManager::runGC()> ======== End GC ======== (memory/qv4mm.cpp:1129) [I] static void QV4::QObjectWrapper::setProperty(QV4::ExecutionEngine *, QObject *, QQmlPropertyData *, const QV4::Value &)> Overwriting binding on QQmlConnections_QML_91::target at qrc:/file.qml:41 that was initially bound at qrc:/file.qml:50:3 (jsruntime/qv4qobjectwrapper.cpp:491)[D] void QV4::MemoryManager::runGC()> ========== GC ========== (memory/qv4mm.cpp:1064) [D] void QV4::MemoryManager::runGC()> Triggered by alloc request of 1 slots. (memory/qv4mm.cpp:1066) [D] void QV4::MemoryManager::runGC()> Allocations since last GC 6699 (memory/qv4mm.cpp:1067) [D] void QV4::MemoryManager::runGC()> Allocated 709632 bytes in 8 chunks (memory/qv4mm.cpp:1071) [D] void QV4::MemoryManager::runGC()> Fragmented memory before GC 64896 (memory/qv4mm.cpp:1072) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for Block allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 0 (memory/qv4mm.cpp:1033) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for InternalClass allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 0 (memory/qv4mm.cpp:1033) [D] void QV4::MemoryManager::runGC()> triggered by unmanaged heap: (memory/qv4mm.cpp:1087) [D] void QV4::MemoryManager::runGC()> old unmanaged heap size: 131084 (memory/qv4mm.cpp:1088) [D] void QV4::MemoryManager::runGC()> new unmanaged heap: 125894 (memory/qv4mm.cpp:1089) [D] void QV4::MemoryManager::runGC()> unmanaged heap limit: 131072 (memory/qv4mm.cpp:1090) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for Block allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 26 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 46 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 15 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 19 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 19 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 17 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 103 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 147040 (memory/qv4mm.cpp:1033) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> Slot map for InternalClasss allocator: (memory/qv4mm.cpp:1013) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 0 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 1 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 2 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 3 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 4 : 16 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 5 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 6 : 0 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> number of entries in slot 7 : 36 (memory/qv4mm.cpp:1023) [D] size_t QV4::dumpBins(QV4::BlockAllocator *, const char *)> total mem in bins 157824 (memory/qv4mm.cpp:1033) [D] void QV4::MemoryManager::runGC()> Marked object in 1246 us. (memory/qv4mm.cpp:1094) [D] void QV4::MemoryManager::runGC()> 9024 objects marked (memory/qv4mm.cpp:1095) [D] void QV4::MemoryManager::runGC()> Sweeped object in 973 us. (memory/qv4mm.cpp:1096) [D] void QV4::MemoryManager::runGC()> Used memory before GC: 644736 (memory/qv4mm.cpp:1111) [D] void QV4::MemoryManager::runGC()> Used memory after GC: 404768 (memory/qv4mm.cpp:1112) [D] void QV4::MemoryManager::runGC()> Freed up bytes : 239968 (memory/qv4mm.cpp:1113) [D] void QV4::MemoryManager::runGC()> Freed up chunks : 0 (memory/qv4mm.cpp:1114) [D] void QV4::MemoryManager::runGC()> ======== End GC ======== (memory/qv4mm.cpp:1129) [I] static void QV4::QObjectWrapper::setProperty(QV4::ExecutionEngine *, QObject *, QQmlPropertyData *, const QV4::Value &)> Overwriting binding on EmailAddress_QMLTYPE_108::specifications at qrc:/file.qml:45 that was initially bound at qrc:/file.qml:17:2 (jsruntime/qv4qobjectwrapper.cpp:491)
... which does not help a lot
Do we have any other related logging categories to keep digging?