SUMMARY merkuro-calendar crashes because of binding loop when user requests Chinese UI > file:///usr/lib/qt/qml/org/kde/kirigami.2/private/globaltoolbar/ToolBarPageHeader.qml:32:9: QML Loader (parent or ancestor of QQuickLayoutAttached): Binding loop detected for property "maximumWidth" STEPS TO REPRODUCE 1. add a new linux user and login 2. run `merkuro-calendar` => work 3. run `LANG=zh_CN LANGUAGE= merkuro-calendar` => crash SOFTWARE/OS VERSIONS merkuro-calenda (Gear) 23.07.80 KDE Plasma Version: 5.27.6 (wayland) KDE Frameworks Version: 5.108.0 Qt Version: 5.15.10 (kde patched)
Any "LANG" which is not empty or C, does produce a crash: no crash: LANG= merkuro-calendar LANG=C merkuro-calendar crash: LANG=C.UTF-8 merkuro-calendar LANG=de_DE.UTF-8 merkuro-calendar LANG=fr_FR.UTF-8 merkuro-calendar LANG=en_US.UTF-8 merkuro-calendar LANG=en_US merkuro-calendar The bind loop message seems irrelevant, since it also appears when it does not crash. From the backtrace it seems to try to look up a qml property and fails doing that. I've got no idea how to debug this further, though: (gdb) bt #0 0x00007ffff709f452 in QV4::QQmlValueTypeWrapper::create(QV4::ExecutionEngine*, QObject*, int, QMetaObject const*, int) (engine=0x555555cd8870, object=0x5555567c3e80, property=13, metaObject=0x7ffff7d11de0 <QQuickColorValueType::staticMetaObject>, typeId=67) at /usr/src/debug/qt5-declarative/qtdeclarative/src/qml/qml/qqmlvaluetypewrapper.cpp:187 #1 0x00007ffff6f74476 in loadProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData const&) (v4=0x555555cd8870, object=0x5555567c3e80, property=...) at /usr/src/debug/qt5-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:186 #2 0x00007ffff6f7535d in QV4::QObjectWrapper::getQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, bool*, QQmlPropertyData**) (property=0x0, hasProperty=0x0, revisionMode=QV4::QObjectWrapper::IgnoreRevision, name=0x7fffbc3c05b0, object=0x5555567c3e80, qmlContext=0x555558478de0, engine=0x555555cd8870) at /usr/src/debug/qt5-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:388 #3 QV4::QObjectWrapper::getQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, bool*, QQmlPropertyData**) (engine=0x555555cd8870, qmlContext=0x555558478de0, object=0x5555567c3e80, name=0x7fffbc3c05b0, revisionMode=QV4::QObjectWrapper::IgnoreRevision, hasProperty=0x0, property=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:358 #4 0x00007ffff70a50bf in QV4::QQmlTypeWrapper::virtualGet(QV4::Managed const*, QV4::PropertyKey, QV4::Value const*, bool*) (m=0x7fffbc3c05a0, id=..., receiver=0x7fffbc3c05a0, hasProperty=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/qml/qml/qqmltypewrapper.cpp:268 #5 0x00007ffff6f1f301 in QV4::Lookup::getterFallback(QV4::Lookup*, QV4::ExecutionEngine*, QV4::Value const&) (l=0x555556516920, engine=0x555555cd8870, object=<optimized out>) at /usr/src/debug/qt5-declarative/qtdeclarative/src/qml/jsruntime/qv4lookup.cpp:231 #6 0x00007fffa53b6828 in () #7 0x00007fffff7ff4e0 in () #8 0x0000000000000000 in ()
(In reply to brainpower from comment #1) > Any "LANG" which is not empty or C, does produce a crash: > > no crash: > LANG= merkuro-calendar > LANG=C merkuro-calendar > > crash: > LANG=C.UTF-8 merkuro-calendar > LANG=de_DE.UTF-8 merkuro-calendar > LANG=fr_FR.UTF-8 merkuro-calendar > LANG=en_US.UTF-8 merkuro-calendar > LANG=en_US merkuro-calendar not any LANG produce a crash `LANG=en_US.UTF-8 LANGUAGE=en_US merkuro-calendar` => work extra info: if rm/mv /usr/share/locale/<LANG>/LC_MESSAGES/libkirigami2plugin_qt.qm or libphonon_qt.qm, then the window is shown with mainly English UI.
oh, I overlooked the LANGUAGE var was set (and relevant) on my system and only overwrote LANG. with LANGUAGE unset or set analogous to LANG the en_* locales work for me too. And locales with no corresponding *.qm files installed, do not crash, but the app is not fully translated of course.
Seems if you set `LANGUAGE=C` and `LANG=<LANG>.UTF-8`, merkuro-calendar will start and load locale without crash. For example: > LANG=zh_CN.UTF-8 LANGUAGE=C merkuro-calendar will start and load zh_CN locale normally.
I can confirm that @dehe_tian@outlook.com's workaround fixes this issue.
hoped it would be fixed in 23.08.1 - issue still there.
Can confirm the issue with the qt5 build of Merkuro on my work computer but not on master with qt6 on my personal computer. The backtrace tells me that this is caused by a infinite lool in the until we get a stack overflow #3801 0x00007ffff44e8481 in void doActivate<false>(QObject*, int, void**) () at /lib64/libQt5Core.so.5 #3802 0x00007ffff4ef19a4 in QQuickAction::checkedChanged(bool) () at /lib64/libQt5QuickTemplates2.so.5 #3803 0x00007ffff4ef7b1d in QQuickAbstractButton::setChecked(bool) () at /lib64/libQt5QuickTemplates2.so.5 #3804 0x00007ffff44e8481 in void doActivate<false>(QObject*, int, void**) () at /lib64/libQt5Core.so.5 #3805 0x00007ffff4ef19a4 in QQuickAction::checkedChanged(bool) () at /lib64/libQt5QuickTemplates2.so.5 weird that it only happens with some locales
Confirmed this still happens with version 23.08.04.
see this as well. #0 0x00007f540ff55c7a QV4::Heap::InternalClass::changeVTableImpl(QV4::VTable const*) (libQt5Qml.so.5 0x155c7a) #1 0x00007f541011f37b QV4::QQmlValueTypeWrapper::create(QV4::ExecutionEngine*, QObject*, int, QMetaObject const*, int) (libQt5Qml.so.5 0x31f37b) #2 0x00007f540ffc4e75 loadProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData const&) (libQt5Qml.so.5 0x1c4e75) #3 0x00007f540ffc59c3 QV4::QObjectWrapper::getQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, bool*, QQmlPropertyData**) (libQt5Qml.so.5 0x1c59c3) #4 0x00007f5410124c77 QV4::QQmlTypeWrapper::virtualGet(QV4::Managed const*, QV4::PropertyKey, QV4::Value const*, bool*) (libQt5Qml.so.5 0x324c77) #5 0x00007f540ff4f585 QV4::Lookup::getterFallback(QV4::Lookup*, QV4::ExecutionEngine*, QV4::Value const&) (libQt5Qml.so.5 0x14f585) #6 0x00007f53d4449aa1 n/a (n/a 0x0) #7 0x00007f540ffead50 QV4::Moth::VME::exec(QV4::CppStackFrame*, QV4::ExecutionEngine*) (libQt5Qml.so.5 0x1ead50) #8 0x00007f540ff7ad02 QV4::Function::call(QV4::Value const*, QV4::Value const*, int, QV4::ExecutionContext const*) (libQt5Qml.so.5 0x17ad02) #9 0x00007f5410111040 QQmlJavaScriptExpression::evaluate(QV4::CallData*, bool*) (libQt5Qml.so.5 0x311040) #10 0x00007f54101177c7 QQmlBinding::evaluate(bool*) (libQt5Qml.so.5 0x3177c7) #11 0x00007f541011bd7b QQmlNonbindingBinding::doUpdate(QQmlJavaScriptExpression::DeleteWatcher const&, QFlags<QQmlPropertyData::WriteFlag>, QV4::Scope&) (libQt5Qml.so.5 0x31bd7b) #12 0x00007f5410119615 QQmlBinding::update(QFlags<QQmlPropertyData::WriteFlag>) (libQt5Qml.so.5 0x319615) #13 0x00007f54100f4e17 QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (libQt5Qml.so.5 0x2f4e17) #14 0x00007f540e6e8e20 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e8e20) #15 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #16 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #17 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #18 0x00007f540f0f7b44 QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab44) #19 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #20 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #21 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #22 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #23 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #24 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #25 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #26 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #27 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #28 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #29 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #30 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #31 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #32 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #33 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #34 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #35 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #36 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #37 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #38 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #39 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #40 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #41 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #42 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #43 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #44 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #45 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #46 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #47 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #48 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #49 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #50 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #51 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #52 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #53 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #54 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #55 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #56 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #57 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #58 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #59 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #60 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) #61 0x00007f540e6e9151 void doActivate<false>(QObject*, int, void**) (libQt5Core.so.5 0x2e9151) #62 0x00007f540f0f19a4 QQuickAction::checkedChanged(bool) (libQt5QuickTemplates2.so.5 0xa49a4) #63 0x00007f540f0f7b0d QQuickAbstractButton::setChecked(bool) (libQt5QuickTemplates2.so.5 0xaab0d) --- temp = <error reading variable temp (Cannot access memory at address 0x7fff426bdff0)> t = <optimized out> newClass = <optimized out> (gdb) info args this = 0x7f53e0000880 vt = 0x7f541029ace0 <QV4::QQmlValueTypeReference::static_vtbl> (gdb) where #0 QV4::Heap::InternalClass::changeVTableImpl (this=0x7f53e0000880, vt=vt@entry=0x7f541029ace0 <QV4::QQmlValueTypeReference::static_vtbl>) at jsruntime/qv4internalclass.cpp:529 #1 0x00007f541011f37b in QV4::Heap::InternalClass::changeVTable ( vt=0x7f541029ace0 <QV4::QQmlValueTypeReference::static_vtbl>, this=<optimized out>) at ../../include/QtQml/5.15.12/QtQml/private/../../../../../src/qml/jsruntime/qv4internalclass_p.h:456 #2 QV4::InternalClass::changeVTable (vt=0x7f541029ace0 <QV4::QQmlValueTypeReference::static_vtbl>, this=0x7f53d45bf5c8) at ../../include/QtQml/5.15.12/QtQml/private/../../../../../src/qml/jsruntime/qv4managed_p.h:226 #3 QV4::MemoryManager::allocateObject<QV4::QQmlValueTypeReference> (this=0x55588007cf00) at ../../include/QtQml/5.15.12/QtQml/private/../../../../../src/qml/memory/qv4mm_p.h:209 #4 QV4::MemoryManager::allocate<QV4::QQmlValueTypeReference> (this=0x55588007cf00) at ../../include/QtQml/5.15.12/QtQml/private/../../../../../src/qml/memory/qv4mm_p.h:244 #5 QV4::QQmlValueTypeWrapper::create (engine=engine@entry=0x55588049ac20, object=object@entry=0x5558818efbd0, property=13, metaObject=metaObject@entry=0x7f5410f7e5a0 <QQuickColorValueType::staticMetaObject>, typeId=67) at qml/qqmlvaluetypewrapper.cpp:191 #6 0x00007f540ffc4e75 in loadProperty (v4=0x55588049ac20, object=0x5558818efbd0, property=...) at jsruntime/qv4qobjectwrapper.cpp:186 #7 0x00007f540ffc59c3 in QV4::QObjectWrapper::getQmlProperty (engine=engine@entry=0x55588049ac20, qmlContext=qmlContext@entry=0x5558818efd10, object=0x5558818efbd0, name=0x7f53d45bf5b8, revisionMode=revisionMode@entry=QV4::QObjectWrapper::IgnoreRevision, hasProperty=hasProperty@entry=0x0, property=0x0) at jsruntime/qv4qobjectwrapper.cpp:388 #8 0x00007f5410124c77 in QV4::QQmlTypeWrapper::virtualGet (m=0x7f53d45bf5a8, id=..., receiver=0x7f53d45bf5a8, hasProperty=0x0) at qml/qqmltypewrapper.cpp:268 #9 0x00007f540ff4f585 in QV4::Object::get (receiver=0x7f53d45bf5a8, hasProperty=0x0, name=0x7f53d45bf5b0, this=0x7f53d45bf5a8) at ../../include/QtQml/5.15.12/QtQml/private/../../../../../src/qml/jsruntime/qv4string_p.h:167 #10 QV4::Lookup::getterFallback (l=<optimized out>, engine=0x55588049ac20, object=...) at jsruntime/qv4lookup.cpp:231 #11 0x00007f53d4449aa1 in ?? () Workaround: LANG=C.UTF-8 LANGUAGE=C merkuro-calendar
Confirmed this still happens with version 23.08.5.