Bug 488668 - Crash in ExpoLayout::calculateWindowTransformationsNatural
Summary: Crash in ExpoLayout::calculateWindowTransformationsNatural
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: generic-crash (show other bugs)
Version: 6.0.5
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-06-18 14:40 UTC by Ellie
Modified: 2024-06-18 21:19 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ellie 2024-06-18 14:40:29 UTC
SUMMARY

KWin for Plasma 6 often crashes, was fine with Plasma 5. I never pay enough attention to figure out how exactly it happens, but I think it's related to the top-left hot corner trigger action and when hitting it, and it's showing one of the possible window overview layouts.

I captured a backtrace for plasma 6.0.5/kwin_wayland 6.0.5 on openSUSE Slowroll:

#0  0x00007ff832a125bc in ExpoLayout::calculateWindowTransformationsNatural()
    (this=this@entry=0x55c131b67af0)
    at /usr/src/debug/kwin-6.0.5/src/plugins/private/expolayout.cpp:539
#1  0x00007ff832a144b9 in ExpoLayout::updatePolish() (this=0x55c131b67af0)
    at /usr/src/debug/kwin-6.0.5/src/plugins/private/expolayout.cpp:293
#2  0x00007ff84f2be933 in QQuickWindowPrivate::polishItems() (this=0x55c1309474c0)
    at /usr/src/debug/qtdeclarative-everywhere-src-6.7.1/src/quick/items/qquickwindow.cpp:369
#3  0x00007ff84f25f9b1 in QQuickRenderControl::polishItems() (this=<optimized out>)
    at /usr/src/debug/qtdeclarative-everywhere-src-6.7.1/src/quick/items/qquickrendercontrol.cpp:344
#4  0x00007ff84fac1bd6 in KWin::OffscreenQuickView::update() (this=0x55c130bf9a00)
    at /usr/src/debug/kwin-6.0.5/src/effect/offscreenquickview.cpp:238
#5  KWin::OffscreenQuickView::update() (this=0x55c130bf9a00)
    at /usr/src/debug/kwin-6.0.5/src/effect/offscreenquickview.cpp:199
#6  0x00007ff84faa1cea in KWin::EffectsHandler::prePaintScreen(KWin::ScreenPrePaintData&, std::chrono::duration<long, std::ratio<1l, 1000l> >)
    (this=0x55c12c39fc30, data=..., presentTime=std::chrono::duration = { <optimized out>ms })
    at /usr/src/debug/kwin-6.0.5/src/effect/effecthandler.cpp:297
#7  0x000055c11225383a in KWin::ScreenEdgeEffect::prePaintScreen(KWin::ScreenPrePaintData&, std::chrono::duration<long, std::ratio<1l, 1000l> >)
    (this=0x55c12c3b2be0, data=..., presentTime=std::chrono::duration = { <optimized out>ms })
    at /usr/src/debug/kwin-6.0.5/src/plugins/screenedge/screenedgeeffect.cpp:83
#8  0x00007ff84faa1cea in KWin::EffectsHandler::prePaintScreen(KWin::ScreenPrePaintData&, std::chrono::duration<long, std::ratio<1l, 1000l> >)
    (this=0x55c12c39fc30, data=<optimized out>, presentTime=std::chrono::duration = { <optimized out>ms }) at /usr/src/debug/kwin-6.0.5/src/effect/effecthandler.cpp:297
#9  0x00007ff84fb99487 in KWin::WorkspaceScene::prePaint(KWin::SceneDelegate*)
    (this=0x55c12b843540, delegate=0x55c12b8b6080)
    at /usr/src/debug/kwin-6.0.5/src/scene/workspacescene.cpp:264
#10 0x00007ff84fb89f95 in KWin::SceneDelegate::prePaint() (this=<optimized out>)
--Type <RET> for more, q to quit, c to continue without paging--
    at /usr/src/debug/kwin-6.0.5/src/scene/scene.cpp:34
#11 0x00007ff84fa41045 in KWin::Compositor::prePaintPass(KWin::RenderLayer*, QRegion*)
    (this=this@entry=0x55c12b66a940, layer=layer@entry=0x55c12b8be820, damage=damage@entry=0x7ffc6b23d7a0) at /usr/src/debug/kwin-6.0.5/src/compositor.cpp:235
#12 0x00007ff84fa41936 in KWin::Compositor::composite(KWin::RenderLoop*)
    (this=0x55c12b66a940, renderLoop=<optimized out>)
    at /usr/src/debug/kwin-6.0.5/src/compositor.cpp:162
#13 0x00007ff84cfe8130 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7ffc6b23db10, r=0x55c12b66a940, this=0x55c12b9e1c80)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qobjectdefs_impl.h:469
#14 doActivate<false>(QObject*, int, void**)
    (sender=0x55c12b6c2830, signal_index=5, argv=0x7ffc6b23db10)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qobject.cpp:4086
#15 0x00007ff84fa5a1e2 in KWin::RenderLoop::frameRequested(KWin::RenderLoop*)
    (this=<optimized out>, _t1=<optimized out>)
    at /usr/src/debug/kwin-6.0.5/build/src/kwin_autogen/include/moc_renderloop.cpp:208
#16 0x00007ff84fa5e933 in KWin::RenderLoopPrivate::dispatch() (this=0x55c12b971480)
    at /usr/src/debug/kwin-6.0.5/src/core/renderloop.cpp:128
#17 0x00007ff84cfe8130 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7ffc6b23dc40, r=0x55c12b6c2830, this=0x55c12b973b00)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qobjectdefs_impl.h:469
#18 doActivate<false>(QObject*, int, void**)
    (sender=0x55c12b9714a0, signal_index=3, argv=0x7ffc6b23dc40)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qobject.cpp:4086
#19 0x00007ff84cfec7fa in QTimer::timeout(QTimer::QPrivateSignal) (this=<optimized out>, _t1=...)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/build/src/corelib/Core_autogen/include/moc_qtimer.cpp:224
#20 0x00007ff84cfd1f76 in QObject::event(QEvent*) (this=0x55c12b9714a0, e=0x7ffc6b23ddc0)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qobject.cpp:1427
#21 0x00007ff84e1c2f7e in QApplicationPrivate::notify_helper(QObject*, QEvent*)
--Type <RET> for more, q to quit, c to continue without paging--
    (this=<optimized out>, receiver=0x55c12b9714a0, e=0x7ffc6b23ddc0)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/widgets/kernel/qapplication.cpp:3287
#22 0x00007ff84cf8ee20 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
    (receiver=0x55c12b9714a0, event=0x7ffc6b23ddc0)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qcoreapplication.cpp:1134
#23 0x00007ff84d0eca5a in QTimerInfoList::activateTimers() (this=0x55c12b343c58)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qtimerinfo_unix.cpp:434
#24 0x00007ff84d0f35ec in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=..., flags@entry=...)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/kernel/qeventdispatcher_unix.cpp:472
#25 0x00007ff84dc0b47d in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/gui/platform/unix/qunixeventdispatcher.cpp:27
#26 0x00007ff84cf9959b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
    (this=0x7ffc6b23dfa0, flags=...)
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/global/qflags.h:34
#27 0x00007ff84cf92da6 in QCoreApplication::exec() ()
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/corelib/global/qflags.h:74
#28 0x00007ff84d7e7e8c in QGuiApplication::exec() ()
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/gui/kernel/qguiapplication.cpp:1926
#29 0x00007ff84e1c0005 in QApplication::exec() ()
    at /usr/src/debug/qtbase-everywhere-src-6.7.1/src/widgets/kernel/qapplication.cpp:2555
#30 0x000055c1121ee702 in main(int, char**) (argc=<optimized out>, argv=<optimized out>)
    at /usr/src/debug/kwin-6.0.5/src/main_wayland.cpp:609
Comment 1 Ellie 2024-06-18 14:42:51 UTC
It crashes with SIGFPE, so it seems to be some floating point or math error. This happens pretty often, usually about once a day.
Comment 2 David Edmundson 2024-06-18 14:56:32 UTC
Apparently fixed with: https://invent.kde.org/plasma/kwin/-/merge_requests/5776 in 6.0
Comment 3 fanzhuyifan 2024-06-18 21:19:06 UTC
`calculateWindowTransformationsNatural` has also been replaced in 6.1 with a new layout algorithm