Bug 465029

Summary: kwin crashes if plasma rendering backend set to software
Product: [Plasma] kwin Reporter: gudvinr+kde
Component: wayland-genericAssignee: KWin default assignee <kwin-bugs-null>
Status: RESOLVED FIXED    
Severity: crash CC: kde
Priority: NOR    
Version First Reported In: 5.26.5   
Target Milestone: ---   
Platform: Arch Linux   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description gudvinr+kde 2023-01-30 08:18:00 UTC
SUMMARY

While doing investigation for bug 463718 I tried to play with different settings and when I set rendering backend to software in `kcmshell5 qtquicksettings`, after system restart plasma started to crash every time I use alt+tab.

It might be 2 issues, in fact. One with plasma not doing what kwin expecting it to do and another kwin crashing, wihch it shouldn't do (ideally) even if something goes wrong because it brings down everything else too.

STEPS TO REPRODUCE
1. Set rendering backed for plasma to software
2. Restart system (only running plasmashell --replace doesn't seem to cause this issue)
3. Open some window
4. Use Alt+Tab

OBSERVED RESULT
Kwin crashes

EXPECTED RESULT
Kwin does not crash

SOFTWARE/OS VERSIONS
Operating System: Arch Linux
KDE Plasma Version: 5.26.5
KDE Frameworks Version: 5.102.0
Qt Version: 5.15.8
Kernel Version: 6.1.8-zen1-1-zen (64-bit)
Graphics Platform: Wayland
Graphics Processor: AMD Radeon RX Vega M GL Graphics

ADDITIONAL INFORMATION

I was able to capture backtrace for failed process:

#0  QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator->() const (this=0x8, this=<optimized out>)
    at /usr/include/qt/QtCore/qscopedpointer.h:116
#1  qGetPtrHelper<QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > >(QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >&)
    (ptr=..., ptr=<optimized out>) at /usr/include/qt/QtCore/qglobal.h:1149
#2  QSGTexture::d_func() (this=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/scenegraph/coreapi/qsgtexture.h:57
#3  QSGTexture::setFiltering(QSGTexture::Filtering) (this=0x0, filter=filter@entry=QSGTexture::Linear)
    at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/scenegraph/coreapi/qsgtexture.cpp:576
#4  0x00007fbb64486d55 in KWin::ThumbnailTextureProvider::setTexture(std::shared_ptr<KWin::GLTexture> const&)
     (nativeTexture=std::shared_ptr<KWin::GLTexture> (use count 2, weak count 0) = {...}, this=0x55db09446aa0) at /usr/include/c++/12.2.0/bits/unique_ptr.h:191
#5  KWin::WindowThumbnailItem::updatePaintNode(QSGNode*, QQuickItem::UpdatePaintNodeData*) (this=0x55db08fb26f0, oldNode=0x0)
    at /usr/src/debug/kwin/kwin-5.26.5/src/scripting/windowthumbnailitem.cpp:227
#6  0x00007fbb63e5b8d8 in QQuickWindowPrivate::updateDirtyNode(QQuickItem*) (this=0x55db08584900, item=0x55db08fb26f0)
    at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickwindow.cpp:3888
#7  0x00007fbb63e5c0e5 in QQuickWindowPrivate::updateDirtyNodes() (this=0x55db08584900)
    at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickwindow.cpp:3633
#8  0x00007fbb63e49489 in QQuickWindowPrivate::syncSceneGraph() (this=0x55db08584900)
    at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickwindow.cpp:524
#9  0x00007fbb63e110e9 in QSGSoftwareRenderLoop::renderWindow(QQuickWindow*, bool)
     (this=0x55db09197030, window=<optimized out>, isNewExpose=<optimized out>)
    at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp:160
#10 0x00007fbb63e52739 in QQuickWindow::event(QEvent*) (this=0x55db0923d9c0, e=0x7fffc702ef50)
    at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickwindow.cpp:1863
#11 0x00007fbb62178b5c in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x55db0923d9c0, e=0x7fffc702ef50)
    at kernel/qapplication.cpp:3640
#12 0x00007fbb62a8de08 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55db0923d9c0, event=0x7fffc702ef50)
    at kernel/qcoreapplication.cpp:1064
#13 0x00007fbb62f3a0e5 in QPlatformWindow::deliverUpdateRequest() (this=<optimized out>) at kernel/qplatformwindow.cpp:796
#14 QPlatformWindow::windowEvent(QEvent*) (event=<optimized out>, this=0x55db09407370) at kernel/qplatformwindow.cpp:476
#15 QGuiApplicationPrivate::sendQWindowEventToQPlatformWindow(QWindow*, QEvent*) (window=<optimized out>, event=<optimized out>)
    at kernel/qguiapplication.cpp:1987
#16 0x00007fbb6217d041 in QApplication::notify(QObject*, QEvent*) (this=0x7fffc702f5f0, receiver=0x55db0923d9c0, e=0x7fffc702f1d0)
    at kernel/qapplication.cpp:2882
#17 0x00007fbb62a8de08 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55db0923d9c0, event=0x7fffc702f1d0)
    at kernel/qcoreapplication.cpp:1064
#18 0x00007fbb62ad8373 in QTimerInfoList::activateTimers() (this=0x55db07edf0a8) at kernel/qtimerinfo_unix.cpp:643
#19 0x00007fbb62ad8822 in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...)
    at kernel/qeventdispatcher_unix.cpp:516
#20 0x000055db0659e9a2 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
#21 0x00007fbb62a865ac in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffc702f370, flags=...)
    at ../../include/QtCore/../../src/corelib/global/qflags.h:69
#22 0x00007fbb62a910d9 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#23 0x00007fbb62f39fe2 in QGuiApplication::exec() () at kernel/qguiapplication.cpp:1870
#24 0x00007fbb62176f2a in QApplication::exec() () at kernel/qapplication.cpp:2832
#25 0x000055db064bf611 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kwin/kwin-5.26.5/src/main_wayland.cpp:609
Comment 1 David Edmundson 2023-01-30 10:10:54 UTC
Fixed in 5.27 with 50b4e988a4794be6fd526eb3e4b1626e17f19637