[kde] [Bug 463709] New: Animated Cursors in Weston with 32 bit QtWayland kde/5.15 branch causes crashes

bugzilla_noreply at kde.org bugzilla_noreply at kde.org
Mon Jan 2 00:59:49 GMT 2023


https://bugs.kde.org/show_bug.cgi?id=463709

            Bug ID: 463709
           Summary: Animated Cursors in Weston with 32 bit QtWayland
                    kde/5.15 branch causes crashes
    Classification: I don't know
           Product: kde
           Version: unspecified
          Platform: Compiled Sources
                OS: Linux
            Status: REPORTED
          Severity: crash
          Priority: NOR
         Component: general
          Assignee: unassigned-bugs at kde.org
          Reporter: bluescreenavenger at gmail.com
  Target Milestone: ---

Created attachment 154946
  --> https://bugs.kde.org/attachment.cgi?id=154946&action=edit
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 at 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 at 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.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the Unassigned-bugs mailing list