https://bugs.kde.org/show_bug.cgi?id=411953
Bug ID: 411953 Summary: FolderView crashes when dragging rubber band on desktop Product: plasmashell Version: master Platform: Compiled Sources OS: Linux Status: REPORTED Severity: crash Priority: NOR Component: Folder Assignee: h...@kde.org Reporter: j...@keelhaul.me.uk CC: plasma-b...@kde.org Target Milestone: 1.0 SUMMARY Since a recent Plasma update, the Folder View as desktop containment asserts when starting to drag a rubber band around the desktop: Application: Plasma (plasmashell), signal: Aborted Using host libthread_db library "/lib64/libthread_db.so.1". [Current thread is 1 (Thread 0x7faafc3b1880 (LWP 9384))] Thread 5 (Thread 0x7faae3fff700 (LWP 9392)): [KCrash Handler] #7 0x00007fab025ab3a4 in raise () from /lib64/libc.so.6 #8 0x00007fab02594536 in abort () from /lib64/libc.so.6 #9 0x00007fab02bb1607 in qt_message_fatal (context=..., message=<synthetic pointer>...) at qtcore-5.13.9999/src/corelib/global/qlogging.cpp:1907 #10 QMessageLogger::fatal (this=this@entry=0x7faae3ffe690, msg=msg@entry=0x7fab02ea24b8 "ASSERT failure in %s: \"%s\", file %s, line %d") at qtcore-5.13.9999/src/corelib/global/qlogging.cpp:888 #11 0x00007fab02bb07e7 in qt_assert_x (where=where@entry=0x7fab03dbff9e "QWidget", what=what@entry=0x7fab03dbfd08 "Widgets must be created in the GUI thread.", file=file@entry=0x7fab03dbeee8 "qtwidgets-5.13.9999/src/widgets/kernel/qwidget.cpp", line=line@entry=1144) at ../../include/QtCore/../../../qtcore-5.13.9999/src/corelib/global/qlogging.h:91 #12 0x00007fab039b213b in QWidgetPrivate::init (this=0x7faadca0d9d0, parentWidget=<optimized out>, f=...) at ../../include/QtCore/../../../qtwidgets-5.13.9999/src/corelib/global/qlogging.h:91 #13 0x00007fab03a34785 in QDesktopWidget::QDesktopWidget (this=0x7faadc28c950) at ../../include/QtCore/../../../qtwidgets-5.13.9999/src/corelib/tools/qlist.h:159 #14 0x00007fab039d2ab5 in QApplication::desktop () at qtwidgets-5.13.9999/src/widgets/kernel/qapplication.cpp:2752 #15 0x00007fab039d2aea in QApplication::fontMetrics () at qtwidgets-5.13.9999/src/widgets/kernel/qapplication.cpp:1785 #16 0x00007faae2dcc20e in RubberBand::paint (this=0x5563c0213320, painter=0x7faae3ffe8d8) at /usr/include/qt5/QtCore/qcoreapplication.h:116 #17 0x00007fab0505b769 in QSGDefaultPainterNode::paint() () from /usr/lib64/libQt5Quick.so.5 #18 0x00007fab0505c56c in QSGDefaultPainterNode::update() () from /usr/lib64/libQt5Quick.so.5 #19 0x00007fab0510d6fa in QQuickPaintedItem::updatePaintNode(QSGNode*, QQuickItem::UpdatePaintNodeData*) () from /usr/lib64/libQt5Quick.so.5 #20 0x00007fab050be68f in QQuickWindowPrivate::updateDirtyNode(QQuickItem*) () from /usr/lib64/libQt5Quick.so.5 #21 0x00007fab050befab in QQuickWindowPrivate::updateDirtyNodes() () from /usr/lib64/libQt5Quick.so.5 #22 0x00007fab050c04c2 in QQuickWindowPrivate::syncSceneGraph() () from /usr/lib64/libQt5Quick.so.5 #23 0x00007fab05062c90 in QSGRenderThread::sync(bool) () from /usr/lib64/libQt5Quick.so.5 #24 0x00007fab050640b4 in QSGRenderThread::syncAndRender() () from /usr/lib64/libQt5Quick.so.5 #25 0x00007fab05067980 in QSGRenderThread::run() () from /usr/lib64/libQt5Quick.so.5 #26 0x00007fab02c02701 in QThreadPrivate::start (arg=0x5563be2bc890) at qtcore-5.13.9999/src/corelib/thread/qthread_unix.cpp:360 #27 0x00007fab017fb588 in start_thread () from /lib64/libpthread.so.0 #28 0x00007fab0267a88f in clone () from /lib64/libc.so.6 Thread 1 (Thread 0x7faafc3b1880 (LWP 9384)): #0 0x00007fab01802434 in pthread_cond_wait () from /lib64/libpthread.so.0 #1 0x00007fab02c090c3 in QWaitConditionPrivate::wait (deadline=..., this=0x5563be039de0) at qtcore-5.13.9999/src/corelib/thread/qwaitcondition_unix.cpp:146 #2 QWaitCondition::wait (this=<optimized out>, mutex=0x5563be2bc8d0, deadline=...) at qtcore-5.13.9999/src/corelib/thread/qwaitcondition_unix.cpp:225 #3 0x00007fab02c091d9 in QWaitCondition::wait (this=0x5563be2bc8d8, mutex=0x5563be2bc8d0, time=<optimized out>) at ../../include/QtCore/../../../qtcore-5.13.9999/src/corelib/kernel/qdeadlinetimer.h:68 #4 0x00007fab05065d50 in QSGThreadedRenderLoop::polishAndSync(QSGThreadedRenderLoop::Window*, bool) () from /usr/lib64/libQt5Quick.so.5 #5 0x00007fab0506692c in QSGThreadedRenderLoop::handleUpdateRequest(QQuickWindow*) () from /usr/lib64/libQt5Quick.so.5 #6 0x00007fab050cd1d3 in QQuickWindow::event(QEvent*) () from /usr/lib64/libQt5Quick.so.5 #7 0x00007fab039d2c22 in QApplicationPrivate::notify_helper (this=this@entry=0x5563bdae8050, receiver=receiver@entry=0x5563bddef510, e=e@entry=0x7fff4d471fc0) at qtwidgets-5.13.9999/src/widgets/kernel/qapplication.cpp:3703 #8 0x00007fab039dbb30 in QApplication::notify (this=0x7fff4d472600, receiver=0x5563bddef510, e=0x7fff4d471fc0) at qtwidgets-5.13.9999/src/widgets/kernel/qapplication.cpp:3449 #9 0x00007fab02dbf1df in QCoreApplication::notifyInternal2 (receiver=0x5563bddef510, event=0x7fff4d471fc0) at qtcore-5.13.9999/src/corelib/kernel/qcoreapplication.cpp:1095 #10 0x00007fab031d8edc in QPlatformWindow::deliverUpdateRequest (this=<optimized out>) at qtgui-5.13.9999/src/gui/kernel/qplatformwindow.cpp:793 #11 0x00007fab031d72be in QPlatformWindow::windowEvent (this=0x5563be003ce0, event=<optimized out>) at qtgui-5.13.9999/src/gui/kernel/qplatformwindow.cpp:478 #12 0x00007fab039db8b3 in QApplication::notify (this=0x7fff4d472600, receiver=0x5563bddef510, e=0x7fff4d472250) at qtwidgets-5.13.9999/src/widgets/kernel/qapplication.cpp:2909 #13 0x00007fab02dbf1df in QCoreApplication::notifyInternal2 (receiver=0x5563bddef510, event=0x7fff4d472250) at qtcore-5.13.9999/src/corelib/kernel/qcoreapplication.cpp:1095 #14 0x00007fab02e1a4db in QTimerInfoList::activateTimers (this=0x5563bdb3ddb0) at qtcore-5.13.9999/src/corelib/kernel/qtimerinfo_unix.cpp:643 #15 0x00007fab02e1ade1 in timerSourceDispatch (source=<optimized out>) at qtcore-5.13.9999/src/corelib/kernel/qeventdispatcher_glib.cpp:183 #16 0x00007faaff63a11d in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0 #17 0x00007faaff63a3c0 in g_main_context_iterate.isra () from /usr/lib64/libglib-2.0.so.0 #18 0x00007faaff63a46c in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0 #19 0x00007fab02e1b145 in QEventDispatcherGlib::processEvents (this=0x5563bdb54910, flags=...) at qtcore-5.13.9999/src/corelib/kernel/qeventdispatcher_glib.cpp:423 #20 0x00007fab02dbd95b in QEventLoop::exec (this=this@entry=0x7fff4d4724b0, flags=..., flags@entry=...) at ../../include/QtCore/../../../qtcore-5.13.9999/src/corelib/global/qflags.h:140 #21 0x00007fab02dc64cf in QCoreApplication::exec () at ../../include/QtCore/../../../qtcore-5.13.9999/src/corelib/global/qflags.h:120 #22 0x00007fab031dd67c in QGuiApplication::exec () at qtgui-5.13.9999/src/gui/kernel/qguiapplication.cpp:1788 #23 0x00007fab039d2b85 in QApplication::exec () at qtwidgets-5.13.9999/src/widgets/kernel/qapplication.cpp:2859 #24 0x00005563bbfd2499 in main (argc=<optimized out>, argv=<optimized out>) at plasma-workspace/shell/main.cpp:219 [Inferior 1 (process 9384) detached] Suspect that this may be a consequence of commit a8efa865, or some other elimination of QDesktopWidget. QDesktopWidget performs a once only construction of a QWidget, but if no QDesktopWidget has yet been created in the GUI thread then the first use will be in RubberBand::paint() when it accesses QApplication::fontMetrics() which uses a QDesktopWidget internally. Unfortunately the RubberBand is running in the render thread and fails with the assert. The easy solution seems to be to remove the initialisation of opt.fontMetrics = qApp->fontMetrics() in RubberBand::paint(). The font metrics are not required to paint the rubber band. Without this line, the rubber band does not crash and is drawn correctly. SOFTWARE/OS VERSIONS KDE Plasma Version: GIT df34f2d07 KDE Frameworks Version: 5.62.0 Qt Version: 5.13.1 -- You are receiving this mail because: You are watching all bug changes.