Summary: | Crash in QQuickItemPrivate::setEffectiveVisibleRecursive | ||
---|---|---|---|
Product: | [Plasma] plasmashell | Reporter: | retired <pepko94> |
Component: | generic-crash | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED UPSTREAM | ||
Severity: | crash | CC: | 1690192590, 2020cmitchell, abdelhakg, alexandre.nunes, arojas, arsenarsentmc, bhush94, bugs.kde.org.trustful938, catalin.pichiu, ch.mercesmoreira, cosmenp, elman, errati, forza51, francis.vermaak.coding, gaamdalurt, garus666, greengogoose, ian.snow, iratusmalusque, kananichandresh, kde, kdeokk, kde_bugs, kiv.apple, krushndayshmookh, lsangild+kdedebug, lukasz, manav.zxa, maxrd2, maxxcan, mdraw.gh+kde, me, nicu, paulmontaque9, peminejkin, plasma-bugs, pyntux, rahulprabhakarddun, rdieter, rulatir, s4bba7, s, sad.dgs, seelook, somnianti, sylvain, victor |
Priority: | NOR | Keywords: | drkonqi |
Version: | 5.8.95 | ||
Target Milestone: | 1.0 | ||
Platform: | Arch Linux | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
retired
2017-01-21 21:14:09 UTC
Same issue after logging off: So it seems that it really doesn't matter if I unlock widgets, still happens. Cool thing that yakuake is on standby. Application: Plazma (plasmashell), signal: Segmentation fault Using host libthread_db library "/usr/lib/libthread_db.so.1". [Current thread is 1 (Thread 0x7fa33613e800 (LWP 1531))] Thread 7 (Thread 0x7fa2804d8700 (LWP 1662)): #0 0x00007fa32a65add4 in g_mutex_unlock () at /usr/lib/libglib-2.0.so.0 #1 0x00007fa32a614c7c in g_main_context_prepare () at /usr/lib/libglib-2.0.so.0 #2 0x00007fa32a6156ab in () at /usr/lib/libglib-2.0.so.0 #3 0x00007fa32a61589c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #4 0x00007fa3301113eb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007fa3300bac1a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #6 0x00007fa32fedc9f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #7 0x00007fa333bccfd6 in () at /usr/lib/libQt5Quick.so.5 #8 0x00007fa32fee1658 in () at /usr/lib/libQt5Core.so.5 #9 0x00007fa32edac454 in start_thread () at /usr/lib/libpthread.so.0 #10 0x00007fa32f7f67df in clone () at /usr/lib/libc.so.6 Thread 6 (Thread 0x7fa30bfff700 (LWP 1655)): #0 0x00007fa32edb210f in pthread_cond_wait@@GLIBC_2.3.2 () at /usr/lib/libpthread.so.0 #1 0x00007fa3358c2244 in () at /usr/lib/libQt5Script.so.5 #2 0x00007fa3358c2289 in () at /usr/lib/libQt5Script.so.5 #3 0x00007fa32edac454 in start_thread () at /usr/lib/libpthread.so.0 #4 0x00007fa32f7f67df in clone () at /usr/lib/libc.so.6 Thread 5 (Thread 0x7fa315d6e700 (LWP 1646)): #0 0x00007fa32f7ed48d in poll () at /usr/lib/libc.so.6 #1 0x00007fa32a615786 in () at /usr/lib/libglib-2.0.so.0 #2 0x00007fa32a61589c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #3 0x00007fa3301113eb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #4 0x00007fa3300bac1a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007fa32fedc9f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #6 0x00007fa333017e75 in () at /usr/lib/libQt5Qml.so.5 #7 0x00007fa32fee1658 in () at /usr/lib/libQt5Core.so.5 #8 0x00007fa32edac454 in start_thread () at /usr/lib/libpthread.so.0 #9 0x00007fa32f7f67df in clone () at /usr/lib/libc.so.6 Thread 4 (Thread 0x7fa317dfa700 (LWP 1588)): #0 0x00007fa32a65adb9 in g_mutex_lock () at /usr/lib/libglib-2.0.so.0 #1 0x00007fa32a614c95 in g_main_context_prepare () at /usr/lib/libglib-2.0.so.0 #2 0x00007fa32a6156ab in () at /usr/lib/libglib-2.0.so.0 #3 0x00007fa32a61589c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #4 0x00007fa3301113eb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007fa3300bac1a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #6 0x00007fa32fedc9f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #7 0x00007fa333017e75 in () at /usr/lib/libQt5Qml.so.5 #8 0x00007fa32fee1658 in () at /usr/lib/libQt5Core.so.5 #9 0x00007fa32edac454 in start_thread () at /usr/lib/libpthread.so.0 #10 0x00007fa32f7f67df in clone () at /usr/lib/libc.so.6 Thread 3 (Thread 0x7fa31d9b9700 (LWP 1554)): #0 0x00007fa32f7ed48d in poll () at /usr/lib/libc.so.6 #1 0x00007fa32a615786 in () at /usr/lib/libglib-2.0.so.0 #2 0x00007fa32a61589c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #3 0x00007fa3301113eb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #4 0x00007fa3300bac1a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007fa32fedc9f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #6 0x00007fa330c610c5 in () at /usr/lib/libQt5DBus.so.5 #7 0x00007fa32fee1658 in () at /usr/lib/libQt5Core.so.5 #8 0x00007fa32edac454 in start_thread () at /usr/lib/libpthread.so.0 #9 0x00007fa32f7f67df in clone () at /usr/lib/libc.so.6 Thread 2 (Thread 0x7fa31f612700 (LWP 1546)): #0 0x00007fa32f7ed48d in poll () at /usr/lib/libc.so.6 #1 0x00007fa3347e88e0 in () at /usr/lib/libxcb.so.1 #2 0x00007fa3347ea679 in xcb_wait_for_event () at /usr/lib/libxcb.so.1 #3 0x00007fa321551239 in () at /usr/lib/libQt5XcbQpa.so.5 #4 0x00007fa32fee1658 in () at /usr/lib/libQt5Core.so.5 #5 0x00007fa32edac454 in start_thread () at /usr/lib/libpthread.so.0 #6 0x00007fa32f7f67df in clone () at /usr/lib/libc.so.6 Thread 1 (Thread 0x7fa33613e800 (LWP 1531)): [KCrash Handler] #6 0x00007fa333c77d06 in QQuickItemPrivate::setEffectiveVisibleRecur(bool) () at /usr/lib/libQt5Quick.so.5 #7 0x00007fa333c77dda in QQuickItemPrivate::setEffectiveVisibleRecur(bool) () at /usr/lib/libQt5Quick.so.5 #8 0x00007fa333c77dda in QQuickItemPrivate::setEffectiveVisibleRecur(bool) () at /usr/lib/libQt5Quick.so.5 #9 0x00007fa333c77f34 in QQuickItem::setVisible(bool) () at /usr/lib/libQt5Quick.so.5 #10 0x00007fa335bf54bc in () at /usr/lib/libKF5PlasmaQuick.so.5 #11 0x00007fa335bf6bee in PlasmaQuick::Dialog::event(QEvent*) () at /usr/lib/libKF5PlasmaQuick.so.5 #12 0x00007fa33102a34c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #13 0x00007fa331031b61 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #14 0x00007fa3300bc7c0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5 #15 0x00007fa33061378e in QWindow::setVisible(bool) () at /usr/lib/libQt5Gui.so.5 #16 0x00007fa335bf2dd4 in PlasmaQuick::Dialog::setVisible(bool) () at /usr/lib/libKF5PlasmaQuick.so.5 #17 0x00007fa335bf5c48 in () at /usr/lib/libKF5PlasmaQuick.so.5 #18 0x00007fa335bf738b in PlasmaQuick::Dialog::qt_metacall(QMetaObject::Call, int, void**) () at /usr/lib/libKF5PlasmaQuick.so.5 #19 0x00007fa332f8b8e9 in () at /usr/lib/libQt5Qml.so.5 #20 0x00007fa332f8a2b8 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyData::WriteFlag>) () at /usr/lib/libQt5Qml.so.5 #21 0x00007fa332f5497b in QV4::QObjectWrapper::setProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData*, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5 #22 0x00007fa332f55190 in QV4::QObjectWrapper::setQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5 #23 0x00007fa332f552a6 in QV4::QObjectWrapper::put(QV4::Managed*, QV4::String*, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5 #24 0x00007fa332f65d86 in QV4::Runtime::method_setProperty(QV4::ExecutionEngine*, QV4::Value const&, int, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5 #25 0x00007fa30b2ff062 in () #26 0x0000000000000018 in () #27 0x00007fa30b2ff624 in () #28 0x00007ffc9907c01c in () #29 0x0003400000000001 in () #30 0x00000000000004fa in () #31 0x0003400000000000 in () #32 0x00007ffc9907c0a0 in () #33 0x0000000000000000 in () *** Bug 375288 has been marked as a duplicate of this bug. *** *** Bug 375801 has been marked as a duplicate of this bug. *** *** Bug 376077 has been marked as a duplicate of this bug. *** *** Bug 376083 has been marked as a duplicate of this bug. *** *** Bug 376328 has been marked as a duplicate of this bug. *** *** Bug 376324 has been marked as a duplicate of this bug. *** Upstream bug report as https://bugreports.qt.io/browse/QTBUG-58811 *** Bug 376356 has been marked as a duplicate of this bug. *** *** Bug 376428 has been marked as a duplicate of this bug. *** *** Bug 376527 has been marked as a duplicate of this bug. *** *** Bug 362432 has been marked as a duplicate of this bug. *** *** Bug 376670 has been marked as a duplicate of this bug. *** *** Bug 376698 has been marked as a duplicate of this bug. *** *** Bug 376811 has been marked as a duplicate of this bug. *** *** Bug 376832 has been marked as a duplicate of this bug. *** *** Bug 377083 has been marked as a duplicate of this bug. *** *** Bug 377137 has been marked as a duplicate of this bug. *** *** Bug 377190 has been marked as a duplicate of this bug. *** *** Bug 377194 has been marked as a duplicate of this bug. *** *** Bug 377192 has been marked as a duplicate of this bug. *** *** Bug 377260 has been marked as a duplicate of this bug. *** *** Bug 377257 has been marked as a duplicate of this bug. *** *** Bug 377333 has been marked as a duplicate of this bug. *** *** Bug 377429 has been marked as a duplicate of this bug. *** *** Bug 377435 has been marked as a duplicate of this bug. *** *** Bug 377695 has been marked as a duplicate of this bug. *** *** Bug 377910 has been marked as a duplicate of this bug. *** I have a theory on this. The code is: for (QQuickItem *childItem : qAsConst(childItems)) { childVisibilityChanged |= QQuickItemPrivate::get(childItem)->setEffectiveVisibleRecur(newEffectiveVisible); } ... emit q->visibleChanged(); which means if an item's visibility changing meant it ended up removing a sibling, we've just altered a loop we're itterating over and we'd potentially get the crash. I tried reproducing that in a simple QML file but it didn't seem to make a crash. Though I'm a bit fuzzy on the new C++11 for loops and how they react. (In reply to David Edmundson from comment #29) > I have a theory on this. > > The code is: > for (QQuickItem *childItem : qAsConst(childItems)) { > childVisibilityChanged |= > QQuickItemPrivate::get(childItem)- > >setEffectiveVisibleRecur(newEffectiveVisible); > } > ... > emit q->visibleChanged(); > Should it test for the current visible state before setting newEffectiveVisible? for (QQuickItem *childItem : qAsConst(childItems)) { if (childItem->isVisible() == newEffectiveVisible) continue; childVisibilityChanged |= QQuickItemPrivate::get(childItem)->setEffectiveVisibleRecur(newEffectiveVisible); } And what happens if a childItem is disabled and its visibility is toggled? if (!childItem->isEnabled || childItem->isVisible() == newEffectiveVisible) continue; *** Bug 377971 has been marked as a duplicate of this bug. *** *** Bug 378035 has been marked as a duplicate of this bug. *** *** Bug 378306 has been marked as a duplicate of this bug. *** *** Bug 378369 has been marked as a duplicate of this bug. *** Backtrace with debug symbols: #0 0x00007ffff5a1fe21 in QQuickItemPrivate::setEffectiveVisibleRecur(bool) (this=0x4225480, newEffectiveVisible=newEffectiveVisible@entry=true) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/quick/items/qquickitem.cpp:5789 #1 0x00007ffff5a1fe2a in QQuickItemPrivate::setEffectiveVisibleRecur(bool) (this=this@entry=0x451d1b0, newEffectiveVisible=<optimized out>) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/quick/items/qquickitem.cpp:5789 #2 0x00007ffff5a1ff84 in QQuickItem::setVisible(bool) (this=<optimized out>, v=<optimized out>) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/quick/items/qquickitem.cpp:5698 #3 0x00007ffff7998bcc in PlasmaQuick::DialogPrivate::updateVisibility(bool) (this=0x4404800, visible=visible@entry=true) at /build/plasma-framework/src/plasma-framework-5.32.0/src/plasmaquick/dialog.cpp:269 #4 0x00007ffff799ad36 in PlasmaQuick::Dialog::event(QEvent*) (this=0x42231e0, event=0x7fffffffb420) at /build/plasma-framework/src/plasma-framework-5.32.0/src/plasmaquick/dialog.cpp:1141 #5 0x00007ffff2dd43dc in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x42231e0, e=0x7fffffffb420) at kernel/qapplication.cpp:3745 #6 0x00007ffff2ddbbf1 in QApplication::notify(QObject*, QEvent*) (this= 0x7fffffffe4d0, receiver=0x42231e0, e=0x7fffffffb420) at kernel/qapplication.cpp:3502 #7 0x00007ffff1e604e0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=receiver@entry=0x42231e0, event=event@entry=0x7fffffffb420) at kernel/qcoreapplication.cpp:988 #8 0x00007ffff23b97ce in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x7fffffffb420, receiver=0x42231e0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231 #9 0x00007ffff23b97ce in QWindow::setVisible(bool) (this=this@entry=0x42231e0, visible=visible@entry=true) at kernel/qwindow.cpp:537 #10 0x00007ffff79966bc in PlasmaQuick::Dialog::setVisible(bool) (this=0x42231e0, visible=<optimized out>) at /build/plasma-framework/src/plasma-framework-5.32.0/src/plasmaquick/dialog.cpp:1316 #11 0x00007ffff7999b88 in PlasmaQuick::Dialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=_o@entry=0x42231e0, _c=_c@entry=QMetaObject::WriteProperty, _id=_id@entry=9, _a=_a@entry=0x7fffffffb550) at /build/plasma-framework/src/build/src/plasmaquick/moc_dialog.cpp:348 #12 0x00007ffff799b50b in PlasmaQuick::Dialog::qt_metacall(QMetaObject::Call, int, void**) (this=0x42231e0, _c=QMetaObject::WriteProperty, _id=9, _a=0x7fffffffb550) at /build/plasma-framework/src/build/src/plasmaquick/moc_dialog.cpp:401 #13 0x00007ffff4d32b09 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const (this=this@entry=0x7fffc804a6f8, target=target@entry=0x42231e0, value=<optimized out>, flags=...) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/include/QtQml/5.8.0/QtQml/private/../../../../../src/qml/qml/qqmlpropertycache_p.h:324 #14 0x00007ffff4d314d8 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyData::WriteFlag>) (object=object@entry=0x42231e0, property=..., value=..., context=0xfac6f0, flags=..., flags@entry=...) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/qml/qml/qqmlproperty.cpp:1197 #15 0x00007ffff4cfbbbb in QV4::QObjectWrapper::setProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData*, QV4::Value const&) (engine=engine@entry=0x819f90, object=object@entry=0x42231e0, property=0x7fffc804a6f8, value=...) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/qml/jsruntime/qv4qobjectwrapper.cpp:475 ---Type <return> to continue, or q <return> to quit--- #16 0x00007ffff4cfc3d0 in QV4::QObjectWrapper::setQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, QV4::Value const&) (engine=0x819f90, qmlContext=<optimized out>, object=0x42231e0, name=<optimized out>, revisionMode=QV4::QObjectWrapper::IgnoreRevision, value=...) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/qml/jsruntime/qv4qobjectwrapper.cpp:362 #17 0x00007ffff4cfc4e6 in QV4::QObjectWrapper::put(QV4::Managed*, QV4::String*, QV4::Value const&) (m=0x7fffd30003f0, name=0x7fffd30003e8, value=...) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/qml/jsruntime/qv4qobjectwrapper.cpp:638 #18 0x00007ffff4d0cf96 in QV4::Object::put(QV4::String*, QV4::Value const&) (v=..., name=<optimized out>, this=<optimized out>) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/qml/jsruntime/qv4object_p.h:330 #19 0x00007ffff4d0cf96 in QV4::Runtime::method_setProperty(QV4::ExecutionEngine*, QV4::Value const&, int, QV4::Value const&) (engine=0x819f90, object=..., nameIndex=<optimized out>, value=...) at /tmp/makepkg/qt5-declarative-debug/src/qtdeclarative-opensource-src-5.8.0/src/qml/jsruntime/qv4runtime.cpp:603 #20 0x00007fffc4044f42 in () #21 0x0000000000000018 in () #22 0x00007fffc4045504 in () #23 0x00007fffd3000520 in () #24 0x0003400000000001 in () #25 0x00000000000004fa in () #26 0x0003400000000000 in () #27 0x00007fffffffb910 in () #28 0x0000000000000000 in () *** Bug 378747 has been marked as a duplicate of this bug. *** *** Bug 378571 has been marked as a duplicate of this bug. *** *** Bug 376834 has been marked as a duplicate of this bug. *** *** Bug 379013 has been marked as a duplicate of this bug. *** *** Bug 379130 has been marked as a duplicate of this bug. *** *** Bug 379276 has been marked as a duplicate of this bug. *** *** Bug 379690 has been marked as a duplicate of this bug. *** *** Bug 379648 has been marked as a duplicate of this bug. *** Sounds pretty bad. How would I go about reproducing this with a debug build of Qt, to see it happen, and if I try to fix it, to verify that it's fixed? *** Bug 379972 has been marked as a duplicate of this bug. *** *** Bug 379921 has been marked as a duplicate of this bug. *** It was what I said in #29. Though I'm still not sure where we do this in plasma code. Fixed in Qt5.9.0 Thanks Qt people *** Bug 380160 has been marked as a duplicate of this bug. *** *** Bug 380259 has been marked as a duplicate of this bug. *** |