With today's git master for KWin, I am seeing kwin_wayland crash when I Alt+Tab. This happens roughly 25% of the time. It's often enough to be quite disruptive. backtrace: Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007f9cae8ef63b in KWin::Window::isDesktop (this=this@entry=0x263b420) at /home/nate/kde/src/kwin/src/window.h:2125 2125 return windowType() == NET::Desktop; [Current thread is 1 (Thread 0x7f9ca7938980 (LWP 27437))] (gdb) bt #0 0x00007f9cae8ef63b in KWin::Window::isDesktop() const (this=this@entry=0x263b420) at /home/nate/kde/src/kwin/src/window.h:2125 #1 KWin::Window::isSpecialWindow() const (this=this@entry=0x263b420) at /home/nate/kde/src/kwin/src/window.cpp:1053 #2 0x00007f9cae8ef6f8 in operator() (cl=0x263b420, __closure=0x7fffaca82410) at /home/nate/kde/src/kwin/src/window.cpp:3420 #3 std::__invoke_impl<bool, KWin::Window::findWindowWithSameCaption() const::<lambda(const KWin::Window*)>&, const KWin::Window*> (__f=...) at /usr/include/c++/12/bits/invoke.h:61 #4 std::__invoke_r<bool, KWin::Window::findWindowWithSameCaption() const::<lambda(const KWin::Window*)>&, const KWin::Window*> (__fn=...) at /usr/include/c++/12/bits/invoke.h:114 #5 std::_Function_handler<bool(const KWin::Window*), KWin::Window::findWindowWithSameCaption() const::<lambda(const KWin::Window*)> >::_M_invoke(const std::_Any_data &, const KWin::Window *&&) (__functor=..., __args#0=<optimized out>) at /usr/include/c++/12/bits/std_function.h:290 #6 0x00007f9cae90831b in std::function<bool (KWin::Window const*)>::operator()(KWin::Window const*) const (__args#0=<optimized out>, this=0x7fffaca82410) at /usr/include/c++/12/bits/std_function.h:591 #7 __gnu_cxx::__ops::_Iter_pred<std::function<bool (KWin::Window const*)> >::operator()<QList<KWin::Window*>::const_iterator>(QList<KWin::Window*>::const_iterator) (__it=..., this=0x7fffaca82410) at /usr/include/c++/12/bits/predefined_ops.h:318 #8 std::__find_if<QList<KWin::Window*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::function<bool (KWin::Window const*)> > >(QList<KWin::Window*>::const_iterator, QList<KWin::Window*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::function<bool (KWin::Window const*)> >, std::random_access_iterator_tag) (__first=..., __last=..., __pred=...) at /usr/include/c++/12/bits/stl_algobase.h:2097 #9 0x00007f9cae90d0a2 in std::__find_if<QList<KWin::Window*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::function<bool (KWin::Window const*)> > >(QList<KWin::Window*>::const_iterator, QList<KWin::Window*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::function<bool (KWin::Window const*)> >) (__pred=..., __last=..., __first=...) at /usr/include/c++/12/bits/stl_algobase.h:2113 #10 std::find_if<QList<KWin::Window*>::const_iterator, std::function<bool (KWin::Window const*)> >(QList<KWin::Window*>::const_iterator, QList<KWin::Window*>::const_iterator, std::function<bool (KWin::Window const*)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/12/bits/stl_algo.h:3878 #11 KWin::Window::findInList<KWin::Window, KWin::Window>(QList<KWin::Window*> const&, std::function<bool (KWin::Window const*)>) (func=..., list=<optimized out>) at /home/nate/kde/src/kwin/src/window.h:2313 #12 KWin::Workspace::findAbstractClient(std::function<bool (KWin::Window const*)>) const (this=0x15dc1e0, func=...) at /home/nate/kde/src/kwin/src/workspace.cpp:1980 #13 0x00007f9cae8f199c in KWin::Window::findWindowWithSameCaption() const (this=this@entry=0x25ce230) at /home/nate/kde/src/kwin/src/window.cpp:3422 #14 0x00007f9cae8e8b2f in KWin::WaylandWindow::updateCaption() (this=0x25ce230) at /home/nate/kde/src/kwin/src/waylandwindow.cpp:191 #15 0x00007f9cae8e8db0 in KWin::WaylandWindow::setCaption(QString const&) (this=this@entry=0x25ce230, caption=...) at /home/nate/kde/src/kwin/src/waylandwindow.cpp:207 #16 0x00007f9cae93f398 in KWin::XdgToplevelWindow::handleWindowTitleChanged() (this=0x25ce230) at /home/nate/kde/src/kwin/src/xdgshellwindow.cpp:1099 #17 0x00007f9cacedb8b6 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fffaca82630, r=<optimized out>, this=0x245f660) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #18 doActivate<false>(QObject*, int, void**) (sender=0x242c830, signal_index=6, argv=0x7fffaca82630) at kernel/qobject.cpp:3886 #19 0x00007f9caced68b7 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=<optimized out>, m=m@entry=0x7f9caec28840 <KWaylandServer::XdgToplevelInterface::staticMetaObject>, local_signal_index=local_signal_index@entry=3, argv=argv@entry=0x7fffaca82630) at kernel/qobject.cpp:3946 #20 0x00007f9cae78adb5 in KWaylandServer::XdgToplevelInterface::windowTitleChanged(QString const&) (this=<optimized out>, _t1=<optimized out>) at /home/nate/kde/build/kwin/src/kwin_autogen/IEXH3JLKNG/moc_xdgshell_interface.cpp:740 #21 0x00007f9caea899b4 in QtWaylandServer::xdg_toplevel::handle_set_title(wl_client*, wl_resource*, char const*) (client=<optimized out>, resource=<optimized out>, title=0x27c26ec "Mozilla Firefox") at /home/nate/kde/build/kwin/src/wayland/qwayland-server-xdg-shell.cpp:1339 #22 0x00007f9caa051746 in ffi_call_unix64 () at ../src/x86/unix64.S:105 #23 0x00007f9caa04e4d2 in ffi_call_int (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=<optimized out>) at ../src/x86/ffi64.c:672 #24 0x00007f9caca711e1 in wl_closure_invoke (closure=closure@entry=0x27c2610, flags=flags@entry=2, target=<optimized out>, target@entry=0x25ae990, opcode=opcode@entry=2, data=<optimized out>, data@entry=0x25762e0) at ../src/connection.c:1025 #25 0x00007f9caca6ca1a in wl_client_connection_data (fd=<optimized out>, mask=<optimized out>, data=0x25762e0) at ../src/wayland-server.c:437 #26 0x00007f9caca6f2f2 in wl_event_loop_dispatch (loop=0x12b1990, timeout=<optimized out>) at ../src/event-loop.c:1027 #27 0x00007f9cae9dc7e7 in KWaylandServer::Display::dispatchEvents() (this=<optimized out>) at /home/nate/kde/src/kwin/src/wayland/display.cpp:114 #28 0x00007f9cacedb8b6 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fffaca82d60, r=<optimized out>, this=0x1fece60) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #29 doActivate<false>(QObject*, int, void**) (sender=0x1fdfda0, signal_index=3, argv=0x7fffaca82d60) at kernel/qobject.cpp:3886 #30 0x00007f9caced68b7 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x1fdfda0, m=m@entry=0x7f9cad16d440 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffaca82d60) at kernel/qobject.cpp:3946 #31 0x00007f9cacede133 in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (this=this@entry=0x1fdfda0, _t1=..., _t2=<optimized out>, _t3=...) at .moc/moc_qsocketnotifier.cpp:178 #32 0x00007f9cacede955 in QSocketNotifier::event(QEvent*) (this=0x1fdfda0, e=<optimized out>) at kernel/qsocketnotifier.cpp:302 #33 0x00007f9cabbaed22 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x1fdfda0, e=0x7fffaca82e60) at kernel/qapplication.cpp:3637 #34 0x00007f9cacea8218 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x1fdfda0, event=0x7fffaca82e60) at kernel/qcoreapplication.cpp:1064 #35 0x00007f9cacef63de in QEventDispatcherUNIXPrivate::activateSocketNotifiers() (this=0x1271480) at kernel/qeventdispatcher_unix.cpp:304 #36 0x00007f9cacef681d in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at kernel/qeventdispatcher_unix.cpp:511 #37 0x000000000052c501 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () #38 0x00007f9cacea6c6a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fffaca82fd0, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69 #39 0x00007f9caceaed32 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #40 0x00007f9cad35fb70 in QGuiApplication::exec() () at kernel/qguiapplication.cpp:1860 #41 0x00007f9cabbaec99 in QApplication::exec() () at kernel/qapplication.cpp:2829 #42 0x0000000000444317 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/nate/kde/src/kwin/src/main_wayland.cpp:613
Just his the same crash when I closes a tab in Firefox with Ctrl+W. This caused the window title to be changed, which presumably went down the same codepath in KWin::WaylandWindow::updateCaption().
A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/2979
*** Bug 459414 has been marked as a duplicate of this bug. ***
can't seem to reproduce, does it make any difference between a quick alt+tab and a slower one waiting the tabbox pops up?
It's not just when alt-tabbing, it turns out. I've had the crash happen in the following ways: - while alt-tabbing - while hitting Meta+V - while clicking on something in a focused Telegram window - while closing a tab in Firefox - while doing nothing at all and my hands weren't even on the mouse or keyboard KWin folks think it apparently it has something to with Maliit. I have it active, since this machine is a 2-in-1.
Git commit b4e94438209e66e5fd303483f8e32147fb19f5ef by Xaver Hugl. Committed on 24/09/2022 at 20:21. Pushed by zamundaaa into branch 'master'. inputpanelv1window: fix showing and hiding Instead of InputMethod directly calling showClient() on the input panel, call methods that properly show or hide the panel as needed, with readyForPainting set appropriately. This removes the cases where it's shown without being ready for painting, which causes crashes. M +8 -2 src/inputmethod.cpp M +1 -0 src/inputmethod.h M +34 -6 src/inputpanelv1window.cpp M +4 -0 src/inputpanelv1window.h https://invent.kde.org/plasma/kwin/commit/b4e94438209e66e5fd303483f8e32147fb19f5ef
Git commit 5df19d6f5e9e27ca4af2d71e4450c6c87d9d90af by Xaver Hugl. Committed on 24/09/2022 at 20:40. Pushed by zamundaaa into branch 'Plasma/5.26'. inputpanelv1window: fix showing and hiding Instead of InputMethod directly calling showClient() on the input panel, call methods that properly show or hide the panel as needed, with readyForPainting set appropriately. This removes the cases where it's shown without being ready for painting, which causes crashes. (cherry picked from commit b4e94438209e66e5fd303483f8e32147fb19f5ef) M +8 -2 src/inputmethod.cpp M +1 -0 src/inputmethod.h M +34 -6 src/inputpanelv1window.cpp M +4 -0 src/inputpanelv1window.h https://invent.kde.org/plasma/kwin/commit/5df19d6f5e9e27ca4af2d71e4450c6c87d9d90af
the backtrace in https://bugs.kde.org/show_bug.cgi?id=460598 looks similar