Summary: | Crash on Wayland when I switched to "Extend to left" multi-monitor mode | ||
---|---|---|---|
Product: | [Plasma] Powerdevil | Reporter: | Patrick Silva <bugseforuns> |
Component: | general | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | kde, meven.car, meven29, nate |
Priority: | NOR | Keywords: | wayland |
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | https://invent.kde.org/plasma/kwin/commit/f0f465ccbd80bda17d66b53e2df5d886be0ec664 | Version Fixed In: | 5.19 |
Sentry Crash Report: |
Description
Patrick Silva
2020-04-06 18:27:37 UTC
*** Bug 419762 has been marked as a duplicate of this bug. *** *** Bug 419761 has been marked as a duplicate of this bug. *** Reproduced Reproduced as well. Have two screens setup. Disable a screen, a qt app crashes (saw this with drkonqi, or plasmashell) #6 0x00007f3499ee95ea in std::__atomic_base<QtSharedPointer::ExternalRefCountData*>::load (__m=std::memory_order_relaxed, this=<optimized out>) at /usr/include/c++/7/bits/atomic_base.h:713 #7 std::atomic<QtSharedPointer::ExternalRefCountData*>::load (__m=std::memory_order_relaxed, this=<optimized out>) at /usr/include/c++/7/atomic:452 #8 QAtomicOps<QtSharedPointer::ExternalRefCountData*>::loadRelaxed<QtSharedPointer::ExternalRefCountData*> (_q_value=...) at ../../include/QtCore/../../src/corelib/thread/qatomic_cxx11.h:239 #9 QBasicAtomicPointer<QtSharedPointer::ExternalRefCountData>::loadRelaxed (this=<optimized out>) at ../../include/QtCore/../../src/corelib/thread/qbasicatomic.h:248 #10 QtSharedPointer::ExternalRefCountData::getAndRef (obj=0x564ac1f8d470) at tools/qsharedpointer.cpp:1395 #11 0x00007f349a67187d in void QWindowSystemInterface::handleWindowScreenChanged<QWindowSystemInterface::DefaultDelivery>(QWindow*, QScreen*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 #12 0x00007f348ff636b7 in QtWaylandClient::QWaylandWindow::handleScreensChanged (this=0x564ac20fa800) at qwaylandwindow.cpp:969 #13 0x00007f349a0cffe7 in QtPrivate::QSlotObjectBase::call (a=0x7fffc4bbc960, r=0x564ac20fa800, this=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394 #14 doActivate<false> (sender=0x564ac20f8670, signal_index=3, argv=0x7fffc4bbc960) at kernel/qobject.cpp:3870 #15 0x00007f349a0ca8a2 in QMetaObject::activate (sender=sender@entry=0x564ac20f8670, m=m@entry=0x7f3490221d20 <QtWaylandClient::QWaylandSurface::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x0) at kernel/qobject.cpp:3930 #16 0x00007f348ff81840 in QtWaylandClient::QWaylandSurface::screensChanged (this=this@entry=0x564ac20f8670) at .moc/moc_qwaylandsurface_p.cpp:155 #17 0x00007f348ff697a4 in QtWaylandClient::QWaylandSurface::surface_enter (this=0x564ac20f8670, output=0x564ac2134df0) at qwaylandsurface.cpp:97 #18 0x00007f348f457dae in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6 #19 0x00007f348f45771f in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6 #20 0x00007f348fae6e24 in ?? () from /usr/lib/x86_64-linux-gnu/libwayland-client.so.0 #21 0x00007f348fae3659 in ?? () from /usr/lib/x86_64-linux-gnu/libwayland-client.so.0 #22 0x00007f348fae4b24 in wl_display_dispatch_queue_pending () from /usr/lib/x86_64-linux-gnu/libwayland-client.so.0 #23 0x00007f348ff5b642 in QtWaylandClient::QWaylandDisplay::flushRequests (this=0x564ac1abb0f0) at qwaylanddisplay.cpp:208 #24 0x00007f349a0cfdc9 in doActivate<false> (sender=0x564ac1b2a390, signal_index=3, argv=0x7fffc4bbcef0) at kernel/qobject.cpp:3882 #25 0x00007f349a0ca8a2 in QMetaObject::activate (sender=sender@entry=0x564ac1b2a390, m=m@entry=0x7f349a562bc0 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffc4bbcef0) at kernel/qobject.cpp:3930 #26 0x00007f349a0d35c8 in QSocketNotifier::activated (this=this@entry=0x564ac1b2a390, _t1=<optimized out>, _t2=...) at .moc/moc_qsocketnotifier.cpp:141 #27 0x00007f349a0d3982 in QSocketNotifier::event (this=0x564ac1b2a390, e=0x7fffc4bbd1c0) at kernel/qsocketnotifier.cpp:266 #28 0x00007f349b4af8bc in QApplicationPrivate::notify_helper (this=this@entry=0x564ac1ab0c30, receiver=receiver@entry=0x564ac1b2a390, e=e@entry=0x7fffc4bbd1c0) at kernel/qapplication.cpp:3684 #29 0x00007f349b4b6ac0 in QApplication::notify (this=0x7fffc4bbd5d0, receiver=0x564ac1b2a390, e=0x7fffc4bbd1c0) at kernel/qapplication.cpp:3430 We should make this a priority as we don't have a lot of time before Qt 5.15 is out. Reported to Qt: https://bugreports.qt.io/browse/QTBUG-83674 Comment 4 is bug 419492. There's a chance this is surfaced by my 80d3f148e0a77f1e38dd2b79c7747e37ac67a5ed *if* kwayland called destroy() then setGeometry() before create() the receiving Qt client would delete the QWaylandScreen object, release their resource, but then process an event dispatched to their now deleted proxy object, that sequence of events would match the backtrace. If you can reproduce reliably we could put debug in KWaylandServer to make sure our global is valid when sending any output events? If that's the case it can be guarded on the client by but really we should just fix kwin sending such events. Git commit 797ccca48cacd86393945608b9e56771ae389b2e by Méven Car. Committed on 26/05/2020 at 15:14. Pushed by meven into branch 'master'. Wayland: avoid binding disabled outputs to surfaces We don't need to bind disabled outputs to surfaces that overlaps them. This prevents error down the line and warnings about ignoring surface.enter events with Qt. M +2 -0 plugins/platforms/drm/drm_output.cpp M +6 -4 xdgshellclient.cpp https://invent.kde.org/plasma/kwin/commit/797ccca48cacd86393945608b9e56771ae389b2e Git commit f0f465ccbd80bda17d66b53e2df5d886be0ec664 by Méven Car. Committed on 26/05/2020 at 15:18. Pushed by meven into branch 'Plasma/5.19'. Wayland: avoid binding disabled outputs to surfaces We don't need to bind disabled outputs to surfaces that overlaps them. This prevents error down the line and warnings about ignoring surface.enter events with Qt. M +2 -0 plugins/platforms/drm/drm_output.cpp M +6 -4 xdgshellclient.cpp https://invent.kde.org/plasma/kwin/commit/f0f465ccbd80bda17d66b53e2df5d886be0ec664 |