Summary: | kwin_wayland frequently crashes in KWin::TabBox::ClientModel::data() after waking up laptop by opening lid | ||
---|---|---|---|
Product: | [Plasma] kwin | Reporter: | Nate Graham <nate> |
Component: | tabbox | Assignee: | KWin default assignee <kwin-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | demm, nicolas.fella |
Priority: | NOR | Keywords: | qt6, wayland |
Version: | master | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
See Also: | https://bugs.kde.org/show_bug.cgi?id=475146 | ||
Latest Commit: | https://invent.kde.org/plasma/kwin/-/commit/4d0d153a579ed3b0bd74b7f4d95539d9e926a271 | Version Fixed In: | |
Sentry Crash Report: |
Description
Nate Graham
2023-11-17 23:04:27 UTC
Looks like https://bugs.kde.org/show_bug.cgi?id=476622 A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/4692 This seems like a regression after removing QWeakPointer. SwitcherItem is kept alive even after it's hidden, and TabBox::ClientModel lacks any cleanup code. It relies on horrible model resets. So when the tabbox is hidden, the workspace stops resetting the client model, which is reasonable, but ClientModel can now contain dangling pointers, and it seems like SwitchItem can use the model while it's hidden. It's bad. :/ Git commit f3e6d3ca196aaef28478c27fd6a3caaed3cdbdff by Vlad Zahorodnii. Committed on 24/11/2023 at 09:35. Pushed by vladz into branch 'master'. Ignore decoration changes of closed windows Ideally the decoration of a closed window should not change. However, it seems like it can happen when resuming the session. When switching to another VT, the touchpad input device is removed, but the touch input device is still kept on my machine. This results in the tablet mode changing temporarily and triggering recalculation of new borders in breeze decoration. It's a no-no thing to do if the window is closed. We need to guard against this case. But in long term, we need to reroute all decoration state updates through kwin so it can block state updates when the window is closed. It's also needed for double buffered state. How to improve handling of tablet mode detection when switching between VTs needs a separate investigation. M +23 -7 src/window.cpp M +15 -3 src/x11window.cpp https://invent.kde.org/plasma/kwin/-/commit/f3e6d3ca196aaef28478c27fd6a3caaed3cdbdff Git commit 4d0d153a579ed3b0bd74b7f4d95539d9e926a271 by Vlad Zahorodnii. Committed on 24/11/2023 at 09:39. Pushed by vladz into branch 'master'. Always reset tabbox ClientModel if a window is added or removed Otherwise dangling pointers can end up in TabBox::ClientModel. Tabbox is written with hard model resets in mind. In order to fix it, the client model has to be rewritten. M +3 -3 src/workspace.cpp https://invent.kde.org/plasma/kwin/-/commit/4d0d153a579ed3b0bd74b7f4d95539d9e926a271 |