Bug 464621 - SIGSEGV (stack overflow?) when resizing quicktiled window rapidly
Summary: SIGSEGV (stack overflow?) when resizing quicktiled window rapidly
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: general (show other bugs)
Version: 5.26.90
Platform: Gentoo Packages Linux
: NOR crash
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords: regression
Depends on:
Blocks:
 
Reported: 2023-01-21 23:02 UTC by Arsen Arsenović
Modified: 2023-01-25 21:47 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.27


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arsen Arsenović 2023-01-21 23:02:28 UTC
KWin crashes on what appears to be a stack overflow when rapidly resizing a quicktiled window.

I can reproduce this crash in a nested Wayland session (open one, run WAYLAND_DISPLAY=wayland-1 kinfocenter, tile kinfocenter, rapidly move the top edge).

I haven't had time to attempt to reproduce this bug on master, nor to build the debug infof or the functions in the trace below without it.  Apologies about that!

STEPS TO REPRODUCE
1. Tile a window to a bottom corner
2. Resize it vertically really quickly
3. Observe the crash

OBSERVED RESULT
KWin crashes on what appears to be a stack overflow

EXPECTED RESULT
KWin does not crash

SOFTWARE/OS VERSIONS
Operating System: Gentoo GNU/Linux 2.9
KDE Plasma Version: 5.26.90
KDE Frameworks Version: 5.102.0
Qt Version: 5.15.8
Kernel Version: 6.1.7-gentoo-dist (64-bit)
Graphics Platform: Wayland
Processors: 16 × AMD Ryzen 7 3800X 8-Core Processor
Memory: 62.7 GiB of RAM
Graphics Processor: NVIDIA GeForce GTX 1050 Ti/PCIe/SSE2
Manufacturer: Gigabyte Technology Co., Ltd.
Product Name: B550M DS3H

ADDITIONAL INFORMATION

Backtrace:
kwin_xkbcommon: XKB: inet:323:58: unrecognized keysym "XF86EmojiPicker"
kwin_xkbcommon: XKB: inet:324:58: unrecognized keysym "XF86Dictate"

Thread 1 "kwin_wayland" received signal SIGSEGV, Segmentation fault.
0x00007ffff6260219 in doActivate<false> (sender=0x555555cac300, signal_index=3, argv=0x7fffff7ff0d0) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3825
3825	   if (!sp->maybeSignalConnected(signal_index)) {
(gdb) bt
#0  0x00007ffff6260219 in doActivate<false> (sender=0x555555cac300, signal_index=3, argv=0x7fffff7ff0d0)
    at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3825
#1  0x00007ffff625b65f in QMetaObject::activate (sender=sender@entry=0x555555cac300, m=m@entry=0x7ffff7d0dc60 <KWin::Tile::staticMetaObject>, 
    local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffff7ff0d0)
    at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3983
#2  0x00007ffff79d8d82 in KWin::Tile::relativeGeometryChanged (this=this@entry=0x555555cac300, _t1=...)
    at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90_build/src/kwin_autogen/include/moc_tile.cpp:362
#3  0x00007ffff79d9745 in KWin::Tile::setRelativeGeometry (geom=..., this=0x555555cac300)
    at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/tile.cpp:102
#4  KWin::Tile::setRelativeGeometry (this=this@entry=0x555555cac300, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/tile.cpp:92
#5  0x00007ffff79d8451 in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...)
    at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:249
#6  0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#7  0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...)
    at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#8  0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
(many repetitions of these stack frames)
#80520 0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80521 0x00007ffff79d851c in KWin::QuickTile::setRelativeGeometry (this=0x555555d92240, geom=...) at /usr/include/qt5/QtCore/qrect.h:526
#80522 0x00007ffff79d7fcb in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80523 0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#80524 0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80525 0x00007ffff79d8589 in KWin::QuickTile::setRelativeGeometry (this=0x555555c7af30, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:241
#80526 0x00007ffff79d7ec6 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80527 0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#80528 0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80529 0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555c7b070, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#80530 0x00007ffff79d7f0d in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80531 0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#80532 0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80533 0x00007ffff79d8589 in KWin::QuickTile::setRelativeGeometry (this=0x555555c7af30, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:241
#80534 0x00007ffff79d7ec6 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80535 0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#80536 0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80537 0x00007ffff79d851c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac4c0, geom=...) at /usr/include/qt5/QtCore/qrect.h:526
#80538 0x00007ffff79d7e7f in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80539 0x00007ffff79d855c in KWin::QuickTile::setRelativeGeometry (this=0x555555cac300, geom=...) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/quicktile.cpp:220
#80540 0x00007ffff79d7e26 in KWin::QuickRootTile::setVerticalSplit (this=0x555555d0a960, split=0.14737883283877348) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:200
#80541 0x00007ffff79d851c in KWin::QuickTile::setRelativeGeometry (this=0x555555c7b210, geom=...) at /usr/include/qt5/QtCore/qrect.h:526
#80542 0x00007ffff79d9b3b in KWin::Tile::resizeFromGravity (this=0x555555c7b210, gravity=KWin::Gravity::Top, x_root=x_root@entry=318, y_root=y_root@entry=149) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/tiles/tile.cpp:233
#80543 0x00007ffff7a1a62b in KWin::Window::handleInteractiveMoveResize (this=0x555555bf4ee0, x=318, y=-122, x_root=318, y_root=149) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/window.cpp:1816
#80544 0x00007ffff7927370 in KWin::DecorationEventFilter::pointerEvent (this=<optimized out>, event=0x7fffffffc430, nativeButton=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/input.cpp:1384
#80545 0x00007ffff7962578 in std::__invoke_impl<bool, bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&> (__f=<optimized out>, __t=@0x555555b87d28: 0x555555bd7da0) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:71
#80546 std::__invoke<bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&> (__fn=<optimized out>) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96
#80547 std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>::__call<bool, KWin::InputEventFilter* const&, 0ul, 1ul, 2ul>(std::tuple<KWin::InputEventFilter* const&>&&, std::_Index_tuple<0ul, 1ul, 2ul>) (__args=..., this=<optimized out>) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/functional:506
#80548 std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>::operator()<KWin::InputEventFilter* const&, bool>(KWin::InputEventFilter* const&) (this=<optimized out>) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/functional:591
#80549 __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >::operator()<KWin::InputEventFilter* const*>(KWin::InputEventFilter* const*) (__it=0x555555b87d28, this=<optimized out>) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/predefined_ops.h:318
#80550 std::__find_if<KWin::InputEventFilter* const*, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> > >(KWin::InputEventFilter* const*, KWin::InputEventFilter* const*, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >, std::random_access_iterator_tag) (__pred=..., __last=0x555555b87d58, __first=0x555555b87d28) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_algobase.h:2078
#80551 std::__find_if<KWin::InputEventFilter* const*, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> > >(KWin::InputEventFilter* const*, KWin::InputEventFilter* const*, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >) (__pred=..., __last=0x555555b87d58, __first=0x555555b87cd8) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_algobase.h:2115
#80552 std::find_if<KWin::InputEventFilter* const*, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(KWin::InputEventFilter* const*, KWin::InputEventFilter* const*, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=0x555555b87d58, __first=0x555555b87cd8) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_algo.h:3923
#80553 std::none_of<KWin::InputEventFilter* const*, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(KWin::InputEventFilter* const*, KWin::InputEventFilter* const*, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=0x555555b87d58, __first=0x555555b87cd8) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_algo.h:477
#80554 std::any_of<KWin::InputEventFilter* const*, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(KWin::InputEventFilter* const*, KWin::InputEventFilter* const*, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=0x555555b87d58, __first=0x555555b87cd8) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_algo.h:496
#80555 KWin::InputRedirection::processFilters<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (function=..., this=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/input.h:194
#80556 KWin::PointerInputRedirection::processMotionInternal (this=0x55555578c8a0, pos=..., delta=..., deltaNonAccelerated=..., time=..., device=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/pointer_input.cpp:247
#80557 0x00007ffff79628f4 in KWin::PointerInputRedirection::processMotionAbsolute (this=<optimized out>, pos=..., time=..., device=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/pointer_input.cpp:219
#80558 0x00007ffff6260526 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffc640, r=<optimized out>, this=0x55555579bf70) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#80559 doActivate<false> (sender=0x555555782b20, signal_index=5, argv=0x7fffffffc640) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3923
#80560 0x00007ffff625b65f in QMetaObject::activate (sender=<optimized out>, m=m@entry=0x7ffff7d08160 <KWin::InputDevice::staticMetaObject>, local_signal_index=local_signal_index@entry=2, argv=argv@entry=0x7fffffffc640) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3983
#80561 0x00007ffff78694d3 in KWin::InputDevice::pointerMotionAbsolute (this=<optimized out>, _t1=..., _t2=_t2@entry=std::chrono::duration = { 3986436000us }, _t3=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90_build/src/kwin_autogen/TAC5DWH4SE/moc_inputdevice.cpp:670
#80562 0x00007ffff7ad2341 in operator() (time=3986436, relativeToSurface=..., __closure=0x555555782a00) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/chrono.h:600
#80563 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<const QPointF&, unsigned int>, void, KWin::Wayland::WaylandInputDevice::WaylandInputDevice(KWayland::Client::Pointer*, KWin::Wayland::WaylandSeat*)::<lambda(const QPointF&, quint32)> >::call (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146
#80564 QtPrivate::Functor<KWin::Wayland::WaylandInputDevice::WaylandInputDevice(KWayland::Client::Pointer*, KWin::Wayland::WaylandSeat*)::<lambda(const QPointF&, quint32)>, 2>::call<QtPrivate::List<QPointF const&, unsigned int>, void> (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256
#80565 QtPrivate::QFunctorSlotObject<KWin::Wayland::WaylandInputDevice::WaylandInputDevice(KWayland::Client::Pointer*, KWin::Wayland::WaylandSeat*)::<lambda(const QPointF&, quint32)>, 2, QtPrivate::List<const QPointF&, unsigned int>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x5555557829f0, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:443
#80566 0x00007ffff6260526 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffc7b0, r=<optimized out>, this=0x5555557829f0) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#80567 doActivate<false> (sender=0x55555577b130, signal_index=5, argv=0x7fffffffc7b0) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3923
#80568 0x00007ffff47b65f6 in KWayland::Client::Pointer::motion(QPointF const&, unsigned int) () from /usr/lib64/libKF5WaylandClient.so.5
#80569 0x00007ffff47d161c in ?? () from /usr/lib64/libKF5WaylandClient.so.5
#80570 0x00007ffff3445f7a in ?? () from /usr/lib64/libffi.so.8
#80571 0x00007ffff344540e in ?? () from /usr/lib64/libffi.so.8
#80572 0x00007ffff3445b0d in ffi_call () from /usr/lib64/libffi.so.8
#80573 0x00007ffff4764746 in wl_closure_invoke (closure=closure@entry=0x7fffe0006350, flags=flags@entry=1, target=<optimized out>, target@entry=0x555555783210, opcode=opcode@entry=2, data=<optimized out>) at ../wayland-1.21.0/src/connection.c:1025
#80574 0x00007ffff4760ac9 in dispatch_event (display=display@entry=0x5555557782e0, queue=0x5555557783b0) at ../wayland-1.21.0/src/wayland-client.c:1595
#80575 0x00007ffff4762424 in dispatch_queue (queue=0x5555557783b0, display=0x5555557782e0) at ../wayland-1.21.0/src/wayland-client.c:1741
#80576 wl_display_dispatch_queue_pending (display=0x5555557782e0, queue=0x5555557783b0) at ../wayland-1.21.0/src/wayland-client.c:1983
#80577 0x00007ffff7ad4073 in KWin::Wayland::WaylandEventThread::dispatch (this=0x555555777d30) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/backends/wayland/wayland_display.cpp:71
#80578 KWin::Wayland::WaylandDisplay::flush (this=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/backends/wayland/wayland_display.cpp:218
#80579 0x00007ffff6260526 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffcd30, r=<optimized out>, this=0x555555784900) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#80580 doActivate<false> (sender=0x55555572e300, signal_index=4, argv=0x7fffffffcd30) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3923
#80581 0x00007ffff625b65f in QMetaObject::activate (sender=sender@entry=0x55555572e300, m=m@entry=0x7ffff64fde00 <QAbstractEventDispatcher::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x0) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3983
#80582 0x00007ffff622abe3 in QAbstractEventDispatcher::awake (this=this@entry=0x55555572e300) at .moc/moc_qabstracteventdispatcher.cpp:149
#80583 0x00007ffff627a71d in QEventDispatcherUNIX::processEvents (this=0x55555572e300, flags=...) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qeventdispatcher_unix.cpp:465
#80584 0x000055555568cfdd in QUnixEventDispatcherQPA::processEvents (this=<optimized out>, flags=...) at /var/tmp/portage/dev-qt/qtgui-5.15.8-r1/work/qtbase-everywhere-src-5.15.8/src/platformsupport/eventdispatchers/qunixeventdispatcher.cpp:63
#80585 0x00007ffff622c95a in QEventLoop::exec (this=this@entry=0x7fffffffcea0, flags=..., flags@entry=...) at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/global/qflags.h:69
#80586 0x00007ffff623472e in QCoreApplication::exec () at /usr/src/debug/dev-qt/qtcore-5.15.8-r2/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/global/qflags.h:121
#80587 0x00007ffff65fb77c in QGuiApplication::exec () at /usr/src/debug/dev-qt/qtgui-5.15.8-r1/qtbase-everywhere-src-5.15.8/src/gui/kernel/qguiapplication.cpp:1870
#80588 0x00007ffff5766fa5 in QApplication::exec () at /usr/src/debug/dev-qt/qtwidgets-5.15.8/qtbase-everywhere-src-5.15.8/src/widgets/kernel/qapplication.cpp:2832
#80589 0x0000555555599d2f in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kde-plasma/kwin-5.26.90/kwin-5.26.90/src/main_wayland.cpp:628
Comment 1 Vlad Zahorodnii 2023-01-23 14:18:01 UTC
Git commit 826fb1cb298fbaa21d7dea754ca225754c6851a7 by Vlad Zahorodnii.
Committed on 23/01/2023 at 12:58.
Pushed by vladz into branch 'master'.

Fix a crash that happens when resizing quick tiled window

QuickTile::setRelativeGeometry() and QuickRootTile::setVerticalSplit() or
QuickRootTile::setHorizontalSplit() can hit recursion when size
constraints start taking effect.

This change reworks how other quick tiles are resized. With the proposed
design, when relative geometry changes, QuickRootTile will notice that
and start resizing other tiles.

When QuickRootTile resizes horizontal or vertical split, it is going to
ignore QuickRootTile::relativeGeometryChanged() signals (m_resizedTile).
It prevents hitting the recursion and makes moving h/v splits more
predictable.

I do think that in order to make the tile design more robust to this
kind of bugs, it's worth splitting geometry in two kinds though - the
one that indicates the preferred geometry (implicitWidth/implicitHeight
in qtquick lingua) and the current geometry, the parent node then
monitors the preferred geometries and updates the current geometries.

M  +57   -108  src/tiles/quicktile.cpp
M  +12   -25   src/tiles/quicktile.h
M  +7    -5    src/tiles/tile.cpp
M  +3    -3    src/tiles/tile.h

https://invent.kde.org/plasma/kwin/commit/826fb1cb298fbaa21d7dea754ca225754c6851a7
Comment 2 Vlad Zahorodnii 2023-01-23 14:18:40 UTC
Git commit 3a7115f850d2e5bf6cb195c1e352a42b5f5ee94a by Vlad Zahorodnii.
Committed on 23/01/2023 at 14:18.
Pushed by vladz into branch 'cherry-pick-826fb1cb'.

Fix a crash that happens when resizing quick tiled window

QuickTile::setRelativeGeometry() and QuickRootTile::setVerticalSplit() or
QuickRootTile::setHorizontalSplit() can hit recursion when size
constraints start taking effect.

This change reworks how other quick tiles are resized. With the proposed
design, when relative geometry changes, QuickRootTile will notice that
and start resizing other tiles.

When QuickRootTile resizes horizontal or vertical split, it is going to
ignore QuickRootTile::relativeGeometryChanged() signals (m_resizedTile).
It prevents hitting the recursion and makes moving h/v splits more
predictable.

I do think that in order to make the tile design more robust to this
kind of bugs, it's worth splitting geometry in two kinds though - the
one that indicates the preferred geometry (implicitWidth/implicitHeight
in qtquick lingua) and the current geometry, the parent node then
monitors the preferred geometries and updates the current geometries.


(cherry picked from commit 826fb1cb298fbaa21d7dea754ca225754c6851a7)

M  +57   -108  src/tiles/quicktile.cpp
M  +12   -25   src/tiles/quicktile.h
M  +7    -5    src/tiles/tile.cpp
M  +3    -3    src/tiles/tile.h

https://invent.kde.org/plasma/kwin/commit/3a7115f850d2e5bf6cb195c1e352a42b5f5ee94a