Bug 463709 - Animated Cursors in Weston with 32 bit QtWayland kde/5.15 branch causes crashes
Summary: Animated Cursors in Weston with 32 bit QtWayland kde/5.15 branch causes crashes
Status: RESOLVED UPSTREAM
Alias: None
Product: kde
Classification: I don't know
Component: general (other bugs)
Version First Reported In: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Unassigned bugs mailing-list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-02 00:59 UTC by bluescreenavenger
Modified: 2023-01-08 01:31 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments
Ugly workaround that prevents the crashes (494 bytes, patch)
2023-01-02 00:59 UTC, bluescreenavenger
Details

Note You need to log in before you can comment on or make changes to this bug.
Description bluescreenavenger 2023-01-02 00:59:49 UTC
Created attachment 154946 [details]
Ugly workaround that prevents the crashes

Hi

I am not sure if Qt bugs are accepted here, but I am using the kde/5.15 maintained patches.

Now https://bugreports.qt.io/browse/QTBUG-78652 has existed since 2019 in 32 bit Qt and Weston. It does not happen in 64 bit Qt, so it's not an issue the patches themselves introduce.

It seems to be FIXED in Qt 6, but they never backported the fix, and I can't seem to find a relevant commit in QtWayland that would have fixed it. I could have missed it, and it is also possible the fix is in QtBase or something

The bug happened ever since they supported animated cursors, once an animated cursor is active and the cursor is over the window, the Qt application crashes (like 'wait' in oxy-white)

I don't think Qt 5.15 is supported for open source people AFAIK, so I doubt they will fix it in 5.15

The attached file is an UGLY workaround, but it prevents the crash, maybe that helps in some direction.

Below is the stack trace:

#0  0x00000001 in ?? ()
No symbol table info available.
#1  0xb43c6d25 in QtWaylandClient::WlCallback::callback_done (this=0xefeb10, 
    callback_data=42452921) at qwaylandinputdevice.cpp:183
No locals.
#2  0xb43f61e7 in QtWayland::wl_callback::handle_done (data=0xefeb10, 
    object=0xe2e910, callback_data=42452921) at qwayland-wayland.cpp:183
No locals.
#3  0xb1ee8408 in ffi_call_i386 () at ../src/x86/sysv.S:120
No locals.
#4  0xb1ee7a4f in ffi_call_int (cif=<optimized out>, fn=<optimized out>, 
    rvalue=<optimized out>, rvalue@entry=0x0, avalue=<optimized out>, 
    closure=<optimized out>) at ../src/x86/ffi.c:391
        rsize = <optimized out>
        bytes = <optimized out>
        frame = <optimized out>
        stack = <optimized out>
        argp = 0xbfd6152c "\233\320\065\264\310\025ֿOz\356\261\324a?\264\t"
        arg_types = 0xbfd61620
        flags = <optimized out>
        cabi = 1
        i = <optimized out>
        n = 3
--Type <RET> for more, q to quit, c to continue without paging--c
        dir = 1
        narg_reg = 0
        pabi = 0xb1ee9298 <abi_params+24>
#5  0xb1ee7cd1 in ffi_call (cif=<optimized out>, fn=<optimized out>, rvalue=0x0, avalue=0xbfd61678) at ../src/x86/ffi.c:397
No locals.
#6  0xb435f02b in wl_closure_invoke (closure=<optimized out>, flags=1, target=<optimized out>, opcode=0, data=<optimized out>) at ../src/connection.c:1025
        count = 1
        cif = {abi = FFI_SYSV, nargs = 3, arg_types = 0xbfd61620, rtype = 0xb1ee9090 <ffi_type_void>, bytes = 12, flags = 9}
        ffi_types = {0xb1ee9024 <ffi_type_pointer>, 0xb1ee9024 <ffi_type_pointer>, 0xb1ee9054 <ffi_type_uint32>, 0xb44f1000, 0xc93570, 0x1, 0xf9d070, 0xb43c187b <QtWaylandClient::QWaylandInputDevice::Pointer::updateCursor()+501>, 0xf9c3c0, 0xec31d0, 0xbfd61674, 0xbfd6167c, 0x1, 0xb61eb000, 0xb61eb740 <main_arena>, 0x20, 0x0, 0xec0007, 0x812dea11, 0x3d719799, 0x1, 0x10}
        ffi_args = {0xbfd61700, 0xbfd616f8, 0xa70043c0, 0xee0007, 0xb60838fb <_int_free+11>, 0xb63b6000, 0xc7f7b4, 0xf5c590, 0xb69a5000, 0xb6274b18 <operator delete(void*)+24>, 0xf5c590, 0x1, 0xb60838fb <_int_free+11>, 0xb63b6000, 0xc7f7b4, 0xb6274b06 <operator delete(void*)+6>, 0xb63b6000, 0xb6274b38 <operator delete(void*, unsigned int)+24>, 0xf5c590, 0x0, 0xb69a5000, 0xb69a5000}
        implementation = <optimized out>
#7  0xb435cafd in dispatch_event (display=display@entry=0xc85680, queue=<optimized out>, queue=<optimized out>) at ../src/wayland-client.c:1595
        closure = 0xa70043b0
        proxy = 0xe2e910
        opcode = 0
        proxy_destroyed = <optimized out>
#8  0xb435dbea in dispatch_queue (queue=0xc856f0, display=0xc85680) at ../src/wayland-client.c:1741
        count = 0
#9  wl_display_dispatch_queue_pending (display=0xc85680, queue=0xc856f0) at ../src/wayland-client.c:1983
        ret = <optimized out>
#10 0xb435dc46 in wl_display_dispatch_pending (display=0xc85680) at ../src/wayland-client.c:2046
No locals.
#11 0xb43c7921 in QtWaylandClient::EventThread::dispatchQueuePending (this=0xd32470) at qwaylanddisplay.cpp:253
No locals.
#12 QtWaylandClient::EventThread::readAndDispatchEvents (this=0xd32470) at qwaylanddisplay.cpp:140
No locals.
#13 QtWaylandClient::QWaylandDisplay::flushRequests (this=0xc824e0) at qwaylanddisplay.cpp:419
No locals.
#14 0xb43cbb34 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QtWaylandClient::QWaylandDisplay::*)()>::call(void (QtWaylandClient::QWaylandDisplay::*)(), QtWaylandClient::QWaylandDisplay*, void**) (arg=0xee56dc, o=0xc824e0, f=<optimized out>) at /opt/include/QtCore/qobjectdefs_impl.h:152
No locals.
#15 QtPrivate::FunctionPointer<void (QtWaylandClient::QWaylandDisplay::*)()>::call<QtPrivate::List<>, void>(void (QtWaylandClient::QWaylandDisplay::*)(), QtWaylandClient::QWaylandDisplay*, void**) (arg=0xee56dc, o=0xc824e0, f=<optimized out>) at /opt/include/QtCore/qobjectdefs_impl.h:185
No locals.
#16 QtPrivate::QSlotObject<void (QtWaylandClient::QWaylandDisplay::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0xd324c0, r=0xc824e0, a=0xee56dc, ret=0x0) at /opt/include/QtCore/qobjectdefs_impl.h:418
No locals.
#17 0xb6672d04 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=0xc824e0, this=<optimized out>) at ../../include/QtCore/../../../src/corelib/kernel/qobjectdefs_impl.h:398
No locals.
#18 QMetaCallEvent::placeMetaCall (this=0xee56b0, object=0xc824e0) at /srcbuild/qt5-qtbase/src/corelib/kernel/qobject.cpp:633
No locals.
#19 0xb667a888 in QObject::event (this=<optimized out>, e=<optimized out>) at /srcbuild/qt5-qtbase/src/corelib/kernel/qobject.cpp:1347
        mce = 0xee56b0
        sender = {previous = 0x0, receiver = 0xc824e0, sender = 0xd32470, signal = 5}
#20 0xb73380d2 in QApplicationPrivate::notify_helper (this=0xc7ee70, receiver=0xc824e0, e=0xee56b0) at /srcbuild/qt5-qtbase/src/widgets/kernel/qapplication.cpp:3637
        consumed = false
        filtered = false
#21 0xb734172a in QApplication::notify (this=0xc7ee60, receiver=0xc824e0, e=0xee56b0) at /srcbuild/qt5-qtbase/src/widgets/kernel/qapplication.cpp:2977
        d = 0xc7ee70
        __PRETTY_FUNCTION__ = "virtual bool QApplication::notify(QObject*, QEvent*)"
        res = false
#22 0xb663ecd2 in QCoreApplication::notifyInternal2 (receiver=0xc824e0, event=0xee56b0) at /srcbuild/qt5-qtbase/src/corelib/kernel/qcoreapplication.cpp:1064
        selfRequired = true
        result = false
        cbdata = {0xc824e0, 0xee56b0, 0xbfd61c1f}
        d = <optimized out>
        threadData = 0xc7c810
        scopeLevelCounter = {threadData = 0xc7c810}
#23 0xb663ef92 in QCoreApplication::sendEvent (receiver=0xc824e0, event=0xee56b0) at /srcbuild/qt5-qtbase/src/corelib/kernel/qcoreapplication.cpp:1462
No locals.
#24 0xb6642db4 in QCoreApplicationPrivate::sendPostedEvents (receiver=<optimized out>, event_type=<optimized out>, data=<optimized out>) at /srcbuild/qt5-qtbase/src/corelib/kernel/qcoreapplication.cpp:1821
        e = <optimized out>
        pe = <optimized out>
        r = 0xc824e0
        relocker = {m_func = {__locker = @0xbfd61cb0}, m_invoke = true}
        event_deleter = {d = 0xee56b0}
        __PRETTY_FUNCTION__ = "static void QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)"
        locker = {_M_device = 0xc7c830, _M_owns = false}
        startOffset = 0
        i = <optimized out>
        cleanup = {receiver = 0x0, event_type = 0, data = 0xc7c810, exceptionCaught = true}
#25 0xb66430b9 in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /srcbuild/qt5-qtbase/src/corelib/kernel/qcoreapplication.cpp:1680
        data = <optimized out>
#26 0xb66acd1b in postEventSourceDispatch (s=0xc7fdd0) at /srcbuild/qt5-qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:277
        source = 0xc7fdd0
#27 0xb47197b2 in g_main_context_dispatch () from /opt/lib/i386-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#28 0xb4719a27 in g_main_context_iterate.constprop () from /opt/lib/i386-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#29 0xb4719ad5 in g_main_context_iteration () from /opt/lib/i386-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#30 0xb66ac6a1 in QEventDispatcherGlib::processEvents (this=0xd2d610, flags=...) at /srcbuild/qt5-qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:423
        d = 0xcbbb50
        canWait = true
        savedFlags = {i = <optimized out>}
        result = <optimized out>
#31 0xb440bdcf in QPAEventDispatcherGlib::processEvents (this=0xd2d610, flags=...) at /srcbuild/qt5-qtbase/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp:120
No locals.
#32 0xb663c6d3 in QEventLoop::processEvents (this=0xbfd61f30, flags=...) at /srcbuild/qt5-qtbase/src/corelib/kernel/qeventloop.cpp:139
        d = <optimized out>
        threadData = <optimized out>
#33 0xb663cda5 in QEventLoop::exec (this=<optimized out>, flags=...) at ../../include/QtCore/../../../src/corelib/global/qflags.h:69
        d = 0xfa19b0
        threadData = <optimized out>
        locker = {val = 13095248}
        __PRETTY_FUNCTION__ = "int QEventLoop::exec(QEventLoop::ProcessEventsFlags)"
        ref = {d = 0xfa19b0, locker = @0xbfd61ec0, exceptionCaught = true}
        app = <optimized out>
#34 0xb6647829 in QCoreApplication::exec () at ../../include/QtCore/../../../src/corelib/global/qflags.h:121
        threadData = 0xc7c810
        __PRETTY_FUNCTION__ = "static int QCoreApplication::exec()"
        eventLoop = {<QObject> = {_vptr.QObject = 0xb69a3bdc <vtable for QEventLoop+8>, static staticMetaObject = {d = {superdata = {direct = 0x0}, stringdata = 0xb683ca80 <qt_meta_stringdata_QObject>, data = 0xb683c960 <qt_meta_data_QObject>, static_metacall = 0xb6680b76 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xfa19b0}, static staticQtMetaObject = {d = {superdata = {direct = 0x0}, stringdata = 0xb683f9e0 <qt_meta_stringdata_Qt>, data = 0xb683cb60 <qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = {direct = 0xb699ea00 <QObject::staticMetaObject>}, stringdata = 0xb68354a0 <qt_meta_stringdata_QEventLoop>, data = 0xb6835440 <qt_meta_data_QEventLoop>, static_metacall = 0xb663c806 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}
        returnCode = <optimized out>
#35 0xb6b6858b in QGuiApplication::exec () at /srcbuild/qt5-qtbase/src/gui/kernel/qguiapplication.cpp:1870
No locals.
#36 0xb7338038 in QApplication::exec () at /srcbuild/qt5-qtbase/src/widgets/kernel/qapplication.cpp:2829
No locals.
#37 0x0049ddce in main ()
No symbol table info available.
Comment 1 Nate Graham 2023-01-06 21:34:36 UTC
Qt bugs should be reported at https://bugreports.qt.io. Thanks.
Comment 2 bluescreenavenger 2023-01-08 01:31:27 UTC
OK, I wasn't sure if Qt 5.15 was still correctly supported or not