Crash in st_ReadPixels on Iris when starting krfb on Wayland session
krfb randomly crashes when started on Wayland session, backtrace points to iris and read_pixels(). Even when it doesn't crash, the remote end shows garbled screen (likely tiled interpreted as linear?)
488 VMOVA %VMM(1), (%rdi)
[Current thread is 1 (Thread 0x7fda66318f80 (LWP 3325))]
(gdb) bt
#0 __memcpy_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:488
#1 0x00007fda4dff16cf in memcpy () at /usr/include/bits/string_fortified.h:29
#2 st_ReadPixels() () at ../mesa-23.3.2/src/mesa/state_tracker/st_cb_readpixels.c:555
#3 0x00007fda4dfb32b9 in read_pixels () at ../mesa-23.3.2/src/mesa/main/readpix.c:1199
#4 _mesa_ReadnPixelsARB() () at ../mesa-23.3.2/src/mesa/main/readpix.c:1216
#5 0x00007fda4dfb3b96 in _mesa_ReadPixels() () at ../mesa-23.3.2/src/mesa/main/readpix.c:1231
#6 0x00007fda5fe8d740 in DmaBufHandler::downloadFrame(QImage&, PipeWireFrame const&) (this=this@entry=0x56320fdeebc0, qimage=..., frame=...) at /usr/include/c++/13.2.1/optional:484
#7 0x00007fda5fea137f in PWFrameBuffer::Private::handleFrame(PipeWireFrame const&) (frame=..., this=0x56320fdeeb50) at /usr/src/debug/krfb/krfb-23.08.4/framebuffers/pipewire/pw_framebuffer.cpp:356
#8 operator() (frame=..., __closure=<optimized out>) at /usr/src/debug/krfb/krfb-23.08.4/framebuffers/pipewire/pw_framebuffer.cpp:115
#9 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const PipeWireFrame&>, void, PWFrameBuffer::Private::Private(PWFrameBuffer*)::<lambda(const PipeWireFrame&)> >::call
(arg=<optimized out>, f=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#10 QtPrivate::Functor<PWFrameBuffer::Private::Private(PWFrameBuffer*)::<lambda(const PipeWireFrame&)>, 1>::call<QtPrivate::List<PipeWireFrame const&>, void>
(arg=<optimized out>, f=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#11 QtPrivate::QFunctorSlotObject<PWFrameBuffer::Private::Private(PWFrameBuffer*)::<lambda(const PipeWireFrame&)>, 1, QtPrivate::List<const PipeWireFrame&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#12 0x00007fda6b2cff57 in () at /usr/lib/libQt5Core.so.5
#13 0x00007fda5fe746aa in PipeWireSourceStream::frameReceived(PipeWireFrame const&) (this=this@entry=0x56320fed6680, _t1=...)
at /usr/src/debug/kpipewire/build/src/KPipeWire_autogen/EWIEGA46WW/moc_pipewiresourcestream.cpp:219
#14 0x00007fda5fe801ce in PipeWireSourceStream::handleFrame(pw_buffer*) (this=this@entry=0x56320fed6680, buffer=buffer@entry=0x563210283aa8)
at /usr/src/debug/kpipewire/kpipewire-5.27.10/src/pipewiresourcestream.cpp:533
#15 0x00007fda5fe80b1d in PipeWireSourceStream::process() (this=0x56320fed6680) at /usr/src/debug/kpipewire/kpipewire-5.27.10/src/pipewiresourcestream.cpp:551
#16 0x00007fda5446b268 in do_call_process (loop=<optimized out>, async=<optimized out>, seq=<optimized out>, data=<optimized out>, size=<optimized out>, user_data=0x563210283670)
at ../pipewire/src/pipewire/stream.c:453
#17 do_call_process (loop=<optimized out>, async=<optimized out>, seq=<optimized out>, data=<optimized out>, size=<optimized out>, user_data=0x563210283670) at ../pipewire/src/pipewire/stream.c:446
#18 0x00007fda5e991988 in flush_items (impl=0x563210260258) at ../pipewire/spa/plugins/support/loop.c:180
#19 0x00007fda5e990cb9 in source_event_func (source=0x5632100186a0) at ../pipewire/spa/plugins/support/loop.c:663
#20 0x00007fda5e992646 in loop_iterate (object=0x563210260258, timeout=<optimized out>) at ../pipewire/spa/plugins/support/loop.c:496
#21 0x00007fda5fe765e9 in operator() (__closure=<optimized out>) at /usr/src/debug/kpipewire/kpipewire-5.27.10/src/pipewirecore.cpp:78
#22 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, PipeWireCore::init(int)::<lambda()> >::call (arg=<optimized out>, f=<optimized out>)
at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#23 QtPrivate::Functor<PipeWireCore::init(int)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#24 QtPrivate::QFunctorSlotObject<PipeWireCore::init(int)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *)
(which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#25 0x00007fda6b2cff57 in () at /usr/lib/libQt5Core.so.5
#26 0x00007fda6b2d1724 in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) () at /usr/lib/libQt5Core.so.5
#27 0x00007fda6b2d1868 in QSocketNotifier::event(QEvent*) () at /usr/lib/libQt5Core.so.5
#28 0x00007fda6bf788ff in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#29 0x00007fda6b29b048 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#30 0x00007fda6b2e8b66 in () at /usr/lib/libQt5Core.so.5
#31 0x00007fda6910df69 in g_main_dispatch (context=0x7fda60000ec0) at ../glib/glib/gmain.c:3476
#32 0x00007fda6916c367 in g_main_context_dispatch_unlocked (context=0x7fda60000ec0) at ../glib/glib/gmain.c:4284
#33 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7fda60000ec0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
#34 0x00007fda6910c162 in g_main_context_iteration (context=0x7fda60000ec0, may_block=1) at ../glib/glib/gmain.c:4414
#35 0x00007fda6b2e9e0c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#36 0x00007fda6b299d54 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#37 0x00007fda6b29b1f3 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#38 0x000056320f001929 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/krfb/krfb-23.08.4/krfb/main.cpp:183
Mesa: 23.3.2 Linux: 6.6.9 Distro: Archlinux Krfb: 23.08.4-1
Edited by Vasily Khoruzhick