Summary: | kwin_wayland crashes in KWin::Workspace::updateOutputs() when displays are intermittently available after waking from suspend | ||
---|---|---|---|
Product: | [Plasma] kwin | Reporter: | FK <fk-kde-bugs> |
Component: | multi-screen | Assignee: | KWin default assignee <kwin-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | leandrosansilva, nate, vlad.zahorodnii, xaver.hugl |
Priority: | NOR | Keywords: | multiscreen, wayland |
Version: | 6.0.3 | ||
Target Milestone: | --- | ||
Platform: | Arch Linux | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 6.1 | |
Sentry Crash Report: |
Description
FK
2024-04-10 11:28:16 UTC
Hopefully these are helpful: #0 KWin::Output::scale (this=this@entry=0x0) at /usr/src/debug/kwin/kwin-6.0.3.1/src/core/output.cpp:457 #1 0x00007dc3e4d7a8c2 in KWin::Output::geometry (this=0x0) at /usr/src/debug/kwin/kwin-6.0.3.1/src/core/output.cpp:462 #2 0x00007dc3e4ed2496 in KWin::ScreenEdges::createEdgeForClient (this=this@entry=0x602046684550, client=0x60204987d1a0, border=KWin::ElectricBottom, border@entry=3847592469) at /usr/src/debug/kwin/kwin-6.0.3.1/src/screenedge.cpp:1345 #3 0x00007dc3e4ed2816 in KWin::ScreenEdges::reserve (this=this@entry=0x602046684550, client=<optimized out>, border=3847592469) at /usr/src/debug/kwin/kwin-6.0.3.1/src/screenedge.cpp:1310 #4 0x00007dc3e4ed2e46 in KWin::ScreenEdges::recreateEdges (this=<optimized out>) at /usr/src/debug/kwin/kwin-6.0.3.1/src/screenedge.h:523 #5 0x00007dc3e4f797c6 in KWin::Workspace::desktopResized (this=<optimized out>) at /usr/include/c++/13.2.1/bits/unique_ptr.h:199 #6 0x00007dc3e4f679ed in KWin::Workspace::updateOutputs (this=0x602046591030, outputOrder=<optimized out>) at /usr/src/debug/kwin/kwin-6.0.3.1/src/workspace.cpp:1401 #7 0x00007dc3e4f5ec39 in KWin::Workspace::applyOutputConfiguration (outputOrder=..., config=..., this=0x602046591030) at /usr/src/debug/kwin/kwin-6.0.3.1/src/workspace.cpp:482 #8 KWin::Workspace::applyOutputConfiguration (this=this@entry=0x602046591030, config=..., outputOrder=...) at /usr/src/debug/kwin/kwin-6.0.3.1/src/workspace.cpp:477 #9 0x00007dc3e4f5f03d in KWin::Workspace::updateOutputConfiguration (this=0x602046591030) at /usr/src/debug/kwin/kwin-6.0.3.1/src/workspace.cpp:533 #10 0x00007dc3e4f68b3d in KWin::Workspace::slotOutputBackendOutputsQueried (this=0x602046591030) at /usr/src/debug/kwin/kwin-6.0.3.1/src/workspace.cpp:1288 #11 0x00007dc3e2591599 in QtPrivate::QSlotObjectBase::call (a=0x7ffd0f15e098, r=0x602046591030, this=0x602046731560, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qobjectdefs_impl.h:433 #12 doActivate<false> (sender=0x7dc3d40099a0, signal_index=3, argv=0x7ffd0f15e098) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qobject.cpp:4039 #13 0x00007dc3e4fc72bc in KWin::DrmBackend::updateOutputs (this=this@entry=0x7dc3d40099a0) at /usr/src/debug/kwin/kwin-6.0.3.1/src/backends/drm/drm_backend.cpp:266 #14 0x00007dc3e4fc9384 in KWin::DrmBackend::handleUdevEvent (this=0x7dc3d40099a0) at /usr/src/debug/kwin/kwin-6.0.3.1/src/backends/drm/drm_backend.cpp:179 #15 0x00007dc3e2591599 in QtPrivate::QSlotObjectBase::call (a=0x7ffd0f15e680, r=0x7dc3d40099a0, this=0x6020462c9c40, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qobjectdefs_impl.h:433 #16 doActivate<false> (sender=0x6020464526c0, signal_index=3, argv=0x7ffd0f15e680) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qobject.cpp:4039 #17 0x00007dc3e2598e20 in QSocketNotifier::activated (_t3=..., _t2=<optimized out>, _t1=..., this=0x6020464526c0) at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qsocketnotifier.cpp:231 #18 QSocketNotifier::event (this=0x6020464526c0, e=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qsocketnotifier.cpp:326 #19 0x00007dc3e36f437b in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x6020464526c0, e=0x7ffd0f15e780) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/widgets/kernel/qapplication.cpp:3296 #20 0x00007dc3e253a198 in QCoreApplication::notifyInternal2 (receiver=0x6020464526c0, event=0x7ffd0f15e780) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qcoreapplication.cpp:1121 #21 0x00007dc3e269f149 in QCoreApplication::sendEvent (event=0x7ffd0f15e780, receiver=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qcoreapplication.cpp:1539 #22 QEventDispatcherUNIXPrivate::activateSocketNotifiers (this=this@entry=0x6020461aa560) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qeventdispatcher_unix.cpp:268 #23 0x00007dc3e26a05ac in QEventDispatcherUNIX::processEvents (this=<optimized out>, flags=..., flags@entry=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qeventdispatcher_unix.cpp:477 #24 0x00007dc3e2fb3472 in QUnixEventDispatcherQPA::processEvents (this=<optimized out>, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/gui/platform/unix/qunixeventdispatcher.cpp:27 #25 0x00007dc3e25446ee in QEventLoop::processEvents (flags=..., this=0x7ffd0f15e960) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qeventloop.cpp:100 #26 QEventLoop::exec (this=0x7ffd0f15e960, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/kernel/qeventloop.cpp:182 #27 0x00007dc3e253cc38 in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/corelib/global/qflags.h:74 #28 0x00007dc3e36f0efa in QApplication::exec () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.3/src/widgets/kernel/qapplication.cpp:2574 #29 0x00006020443fadee in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kwin/kwin-6.0.3.1/src/main_wayland.cpp:609 It would appear that it's trying to create edges for a disconnected/unavailable screen and failing. Probably needs a guard somewhere. > Probably needs a guard somewhere. No, it seems like some window has a null output. That should never happen. --- https://crash-reports.kde.org/organizations/kde/issues/7733 Git commit cadf16b12e10c591b746d6f8228a16ec0101362b by Vlad Zahorodnii. Committed on 03/06/2024 at 14:54. Pushed by vladz into branch 'master'. Improve handling of closed windows A layer shell window can request a screen edge without having a chance to map the surface. In that case, no Workspace::windowRemoved() signal is not going to be emitted because no surface has been mapped. Perhaps it needs some re-wiring, but on the other hand, it is also more reasonable to monitor Window::closed() signal. With this change, the ScreenEdges manager will reject any request to reserve a screen edge for a closed window. And in addition to that, the ScreenEdges will unreserve screen edges when the window is closed rather than when the window is unmapped. M +8 -4 src/screenedge.cpp https://invent.kde.org/plasma/kwin/-/commit/cadf16b12e10c591b746d6f8228a16ec0101362b A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/5820 I believe the changes above should fix the crash, but I'm unable to reproduce the crash myself. Reopen this bug report if you still see this crash in 6.1.0 Git commit e1bb824eb5ece286781877514199307f2b02c91e by Vlad Zahorodnii. Committed on 03/06/2024 at 14:55. Pushed by vladz into branch 'Plasma/6.1'. Improve handling of closed windows A layer shell window can request a screen edge without having a chance to map the surface. In that case, no Workspace::windowRemoved() signal is not going to be emitted because no surface has been mapped. Perhaps it needs some re-wiring, but on the other hand, it is also more reasonable to monitor Window::closed() signal. With this change, the ScreenEdges manager will reject any request to reserve a screen edge for a closed window. And in addition to that, the ScreenEdges will unreserve screen edges when the window is closed rather than when the window is unmapped. (cherry picked from commit cadf16b12e10c591b746d6f8228a16ec0101362b) 1fb3e1a9 Improve handling of closed windows Co-authored-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org> M +8 -4 src/screenedge.cpp https://invent.kde.org/plasma/kwin/-/commit/e1bb824eb5ece286781877514199307f2b02c91e *** Bug 488640 has been marked as a duplicate of this bug. *** |