Created attachment 166743 [details] GDB backtrace only - Arch SUMMARY Krfb crashes with segmentation fault on Wayland when scaling is enabled. STEPS TO REPRODUCE 1. Start Plasma in a Wayland session 2. Enable scaling in System Settings with only a single monitor connected 3. Run Krfb and confirm the remote control request dialog OBSERVED RESULT Krfb terminates with a segmentation fault. EXPECTED RESULT Krfb starts sharing the desktop. SOFTWARE/OS VERSIONS Operating System: Arch Linux KDE Plasma Version: 6.0.1 KDE Frameworks Version: 6.0.0 Qt Version: 6.6.2 Kernel Version: 6.7.9-zen1-1-zen (64-bit) Graphics Platform: Wayland Processors: 8 × Intel® Core™ i7-4790K CPU @ 4.00GHz Memory: 30.3 GiB of RAM Graphics Processor: NVIDIA GeForce GTX 980/PCIe/SSE2 Krfb Version: 24.02.0 Operating System: Fedora Linux 39 KDE Plasma Version: 5.27.10 KDE Frameworks Version: 5.115.0 Qt Version: 5.15.12 Kernel Version: 6.7.7-200.fc39.x86_64 (64-bit) Graphics Platform: Wayland Processors: 4 × Intel® Core™ i5-3230M CPU @ 2.60GHz Memory: 11.6 GiB of RAM Graphics Processor: Mesa Intel® HD Graphics 4000 Krfb Version: 23.08.5 ADDITIONAL INFORMATION I was able to reproduce this issue on Arch running Krfb 24.02.0 and Plasma 6.0.1, as well as Fedora 39 running Krfb 23.08.5 and Plasma 5.27.10. This issue does not seem to happen, when another monitor is connected which has scaling disabled (100%) or when running under X11.
Created attachment 166744 [details] GDB backtrace only - Fedora 39
Created attachment 166745 [details] GDB full log - Arch
Created attachment 166746 [details] GDB full log - Fedora 39
BACKTRACE: Krfb 24.02.0 @ Arch Thread 1 "krfb" received signal SIGSEGV, Segmentation fault. #0 0x00007fffe2cf3804 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #1 0x00007fffe2cf6991 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #2 0x00007fffe2cf8126 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #3 0x00007fffe2d0f3c1 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #4 0x00007fffe2be3353 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #5 0x00007fffe2cd894e in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #6 0x00007fffe2c8b9e3 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #7 0x00007fffe28bf64a in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #8 0x00007fffe28bfec2 in ??? () at /usr/lib/libnvidia-eglcore.so.550.54.14 #9 0x00007fffeb6411ac in DmaBufHandler::downloadFrame (this=this@entry=0x55555577f678, qimage=..., frame=...) at /usr/include/c++/13.2.1/optional:484 #10 0x00007fffeb35963f in PWFrameBuffer::Private::handleFrame (frame=..., this=0x55555577f600) at /usr/src/debug/krfb/krfb-24.02.0/framebuffers/pipewire/pw_framebuffer.cpp:368 #11 operator() (frame=..., __closure=<optimized out>) at /usr/src/debug/krfb/krfb-24.02.0/framebuffers/pipewire/pw_framebuffer.cpp:116 #12 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/qt6/QtCore/qobjectdefs_impl.h:137 #13 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/qt6/QtCore/qobjectdefs_impl.h:339 #14 QtPrivate::QCallableObject<PWFrameBuffer::Private::Private(PWFrameBuffer*)::<lambda(const PipeWireFrame&)>, 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/qt6/QtCore/qobjectdefs_impl.h:522 #15 0x00007ffff5f90ca9 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffc400, r=0x5555556f9990, this=0x5555556f9b50, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qobjectdefs_impl.h:433 #16 doActivate<false> (sender=0x5555556f9a50, signal_index=7, argv=0x7fffffffc400) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qobject.cpp:4039 #17 0x00007fffead58e5a in PipeWireSourceStream::frameReceived (this=this@entry=0x5555556f9a50, _t1=...) at /usr/src/debug/kpipewire/build/src/KPipeWire_autogen/include/moc_pipewiresourcestream.cpp:287 #18 0x00007fffead5d752 in PipeWireSourceStream::handleFrame (this=this@entry=0x5555556f9a50, buffer=buffer@entry=0x555555b87208) at /usr/src/debug/kpipewire/kpipewire-6.0.1.1/src/pipewiresourcestream.cpp:560 #19 0x00007fffead5e27d in PipeWireSourceStream::process (this=0x5555556f9a50) at /usr/src/debug/kpipewire/kpipewire-6.0.1.1/src/pipewiresourcestream.cpp:578 #20 0x00007fffe939e2a8 in do_call_process (loop=<optimized out>, async=<optimized out>, seq=<optimized out>, data=<optimized out>, size=<optimized out>, user_data=0x555555b86dd0) at ../pipewire/src/pipewire/stream.c:453 #21 do_call_process (loop=<optimized out>, async=<optimized out>, seq=<optimized out>, data=<optimized out>, size=<optimized out>, user_data=0x555555b86dd0) at ../pipewire/src/pipewire/stream.c:446 #22 0x00007fffe975f988 in flush_items (impl=0x555555b639b8) at ../pipewire/spa/plugins/support/loop.c:180 #23 0x00007fffe975ecb9 in source_event_func (source=0x555555b13bb0) at ../pipewire/spa/plugins/support/loop.c:663 #24 0x00007fffe9760646 in loop_iterate (object=0x555555b639b8, timeout=<optimized out>) at ../pipewire/spa/plugins/support/loop.c:496 #25 0x00007fffead4f271 in operator() (__closure=<optimized out>) at /usr/src/debug/kpipewire/kpipewire-6.0.1.1/src/pipewirecore.cpp:90 #26 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, PipeWireCore::init(int)::<lambda()> >::call (arg=<optimized out>, f=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:137 #27 QtPrivate::Functor<PipeWireCore::init(int)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:339 #28 QtPrivate::QCallableObject<PipeWireCore::init(int)::<lambda()>, 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/qt6/QtCore/qobjectdefs_impl.h:522 #29 0x00007ffff5f90ca9 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffcb10, r=0x55555598cf10, this=0x5555559b41e0, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qobjectdefs_impl.h:433 #30 doActivate<false> (sender=0x555555979080, signal_index=3, argv=0x7fffffffcb10) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qobject.cpp:4039 #31 0x00007ffff5f98530 in QSocketNotifier::activated (_t3=..., _t2=<optimized out>, _t1=..., this=0x555555979080) at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qsocketnotifier.cpp:231 #32 QSocketNotifier::event (this=0x555555979080, e=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qsocketnotifier.cpp:326 #33 0x00007ffff6ef438b in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x555555979080, e=0x7fffffffcc10) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/widgets/kernel/qapplication.cpp:3296 #34 0x00007ffff5f39818 in QCoreApplication::notifyInternal2 (receiver=0x555555979080, event=0x7fffffffcc10) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qcoreapplication.cpp:1121 #35 0x00007ffff61754d1 in QCoreApplication::sendEvent (event=0x7fffffffcc10, receiver=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qcoreapplication.cpp:1539 #36 socketNotifierSourceDispatch (source=0x55555563eec0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qeventdispatcher_glib.cpp:73 #37 0x00007ffff4ba6f69 in g_main_dispatch (context=0x7fffec000ef0) at ../glib/glib/gmain.c:3476 #38 0x00007ffff4c053a7 in g_main_context_dispatch_unlocked (context=0x7fffec000ef0) at ../glib/glib/gmain.c:4284 #39 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7fffec000ef0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349 #40 0x00007ffff4ba5162 in g_main_context_iteration (context=0x7fffec000ef0, may_block=1) at ../glib/glib/gmain.c:4414 #41 0x00007ffff61739c4 in QEventDispatcherGlib::processEvents (this=0x5555555bd7c0, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qeventdispatcher_glib.cpp:393 #42 0x00007ffff5f43d6e in QEventLoop::processEvents (flags=..., this=0x7fffffffceb0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qeventloop.cpp:100 #43 QEventLoop::exec (this=0x7fffffffceb0, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/kernel/qeventloop.cpp:182 #44 0x00007ffff5f3c2b8 in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/corelib/global/qflags.h:74 #45 0x00007ffff6ef0f0a in QApplication::exec () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.6.2/src/widgets/kernel/qapplication.cpp:2574 #46 0x00005555555656c3 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/krfb/krfb-24.02.0/krfb/main.cpp:183
BACKTRACE: Krfb 23.08.5 @ Fedora 39 Thread 1 "krfb" received signal SIGSEGV, Segmentation fault. #0 __memcpy_sse2_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:671 #1 0x00007fffd9e49bf7 in memcpy (__len=<optimized out>, __src=0x7fffc0574460, __dest=<optimized out>) at /usr/include/bits/string_fortified.h:29 #2 st_ReadPixels (ctx=ctx@entry=0x555555a1ca00, x=<optimized out>, y=0, width=<optimized out>, height=731, format=format@entry=6408, type=5121, pack=0x7fffffffc310, pixels=<optimized out>) at ../src/mesa/state_tracker/st_cb_readpixels.c:555 #3 0x00007fffd9df9f9e in read_pixels (no_error=false, pixels=0x7fffc0600010, bufSize=2147483647, type=5121, format=6408, height=<optimized out>, width=<optimized out>, y=<optimized out>, x=<optimized out>) at ../src/mesa/main/readpix.c:1199 #4 _mesa_ReadnPixelsARB (x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, format=6408, type=5121, bufSize=2147483647, pixels=0x7fffc0600010) at ../src/mesa/main/readpix.c:1216 #5 0x00007fffd9dfa3a5 in _mesa_ReadPixels (x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, format=<optimized out>, type=<optimized out>, pixels=0x7fffc0600010) at ../src/mesa/main/readpix.c:1231 #6 0x00007fffe0e1ec17 in DmaBufHandler::downloadFrame (this=this@entry=0x555555684920, qimage=..., frame=...) at /usr/include/c++/13/optional:484 #7 0x00007fffe0e7f87b in PWFrameBuffer::Private::handleFrame (frame=..., this=0x5555556848b0) at /usr/src/debug/krfb-23.08.5-1.fc39.x86_64/framebuffers/pipewire/pw_framebuffer.cpp:356 #8 operator() (frame=..., __closure=<optimized out>) at /usr/src/debug/krfb-23.08.5-1.fc39.x86_64/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=...) at /usr/include/qt5/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=...) at /usr/include/qt5/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/qt5/QtCore/qobjectdefs_impl.h:443 #12 0x00007ffff64e9151 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffc5f0, r=<optimized out>, this=0x5555556dc4f0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #13 doActivate<false> (sender=0x5555556dc9d0, signal_index=7, argv=0x7fffffffc5f0) at kernel/qobject.cpp:3925 #14 0x00007ffff64e4077 in QMetaObject::activate (sender=sender@entry=0x5555556dc9d0, m=m@entry=0x7fffe05e04c0 <PipeWireSourceStream::staticMetaObject>, local_signal_index=local_signal_index@entry=4, argv=argv@entry=0x7fffffffc5f0) at kernel/qobject.cpp:3985 #15 0x00007fffe05ce02c in PipeWireSourceStream::frameReceived (this=this@entry=0x5555556dc9d0, _t1=...) at /usr/src/debug/kpipewire-5.27.10-1.fc39.x86_64/redhat-linux-build/src/KPipeWire_autogen/EWIEGA46WW/moc_pipewiresourcestream.cpp:219 #16 0x00007fffe05d9e5f in PipeWireSourceStream::handleFrame (this=this@entry=0x5555556dc9d0, buffer=buffer@entry=0x5555559b6a38) at /usr/src/debug/kpipewire-5.27.10-1.fc39.x86_64/src/pipewiresourcestream.cpp:533 #17 0x00007fffe05da79f in PipeWireSourceStream::process (this=0x5555556dc9d0) at /usr/src/debug/kpipewire-5.27.10-1.fc39.x86_64/src/pipewiresourcestream.cpp:551 #18 0x00007fffe0292708 in do_call_process (loop=<optimized out>, async=<optimized out>, seq=<optimized out>, data=<optimized out>, size=<optimized out>, user_data=0x5555559b6600) at ../src/pipewire/stream.c:453 #19 do_call_process (loop=<optimized out>, async=<optimized out>, seq=<optimized out>, data=<optimized out>, size=<optimized out>, user_data=0x5555559b6600) at ../src/pipewire/stream.c:446 #20 0x00007fffe05aa2da in flush_items (impl=0x5555559913b8) at ../spa/plugins/support/loop.c:180 #21 0x00007fffe05a93d7 in source_event_func (source=0x5555559e58d0) at ../spa/plugins/support/loop.c:663 #22 0x00007fffe05aaf76 in loop_iterate (object=0x5555559913b8, timeout=<optimized out>) at ../spa/plugins/support/loop.c:496 #23 0x00007fffe05d0029 in operator() (__closure=<optimized out>) at /usr/src/debug/kpipewire-5.27.10-1.fc39.x86_64/src/pipewirecore.cpp:78 #24 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, PipeWireCore::init(int)::<lambda()> >::call (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146 #25 QtPrivate::Functor<PipeWireCore::init(int)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256 #26 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/qt5/QtCore/qobjectdefs_impl.h:443 #27 0x00007ffff64e9151 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffccd0, r=<optimized out>, this=0x5555556e0820) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #28 doActivate<false> (sender=0x5555559e5e20, signal_index=3, argv=0x7fffffffccd0) at kernel/qobject.cpp:3925 #29 0x00007ffff64e4077 in QMetaObject::activate (sender=sender@entry=0x5555559e5e20, m=m@entry=0x7ffff6769420 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffffffccd0) at kernel/qobject.cpp:3985 #30 0x00007ffff64ebb5d in QSocketNotifier::activated (this=this@entry=0x5555559e5e20, _t1=..., _t2=<optimized out>, _t3=...) at .moc/moc_qsocketnotifier.cpp:178 #31 0x00007ffff64ec3cb in QSocketNotifier::event (this=0x5555559e5e20, e=<optimized out>) at kernel/qsocketnotifier.cpp:302 #32 0x00007ffff71aeb95 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x5555559e5e20, e=0x7fffffffcde0) at kernel/qapplication.cpp:3640 #33 0x00007ffff64b4e78 in QCoreApplication::notifyInternal2 (receiver=0x5555559e5e20, event=0x7fffffffcde0) at kernel/qcoreapplication.cpp:1064 #34 0x00007ffff64b5092 in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at kernel/qcoreapplication.cpp:1462 #35 0x00007ffff6507e3f in socketNotifierSourceDispatch (source=0x5555555f6df0) at kernel/qeventdispatcher_glib.cpp:107 #36 0x00007ffff4511e5c in g_main_dispatch (context=0x7fffdc000ec0) at ../glib/gmain.c:3476 #37 g_main_context_dispatch_unlocked (context=0x7fffdc000ec0) at ../glib/gmain.c:4284 #38 0x00007ffff456cf18 in g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7fffdc000ec0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4349 #39 0x00007ffff450fad3 in g_main_context_iteration (context=0x7fffdc000ec0, may_block=1) at ../glib/gmain.c:4414 #40 0x00007ffff65073b9 in QEventDispatcherGlib::processEvents (this=0x5555555b1c70, flags=...) at kernel/qeventdispatcher_glib.cpp:423 #41 0x00007ffff64b383b in QEventLoop::exec (this=this@entry=0x7fffffffd080, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69 #42 0x00007ffff64bbacb in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #43 0x00007ffff6960efd in QGuiApplication::exec () at kernel/qguiapplication.cpp:1863 #44 0x00007ffff71aeb09 in QApplication::exec () at kernel/qapplication.cpp:2832
*** Bug 482606 has been marked as a duplicate of this bug. ***
(Manually making this comment since I didn't have a bug tracker account until now - I got an email that this failed) Fixed by https://invent.kde.org/network/krfb/-/merge_requests/63 in master @bug_id = 482929 @bug_status = RESOLVED @resolution = FIXED @cf_commitlink = https://invent.kde.org/network/krfb/-/commit/966ad6a1639732f882284ff6e708b0e37e624ca7 Git commit 966ad6a1639732f882284ff6e708b0e37e624ca7 by Jordan Pryde. Committed on 12/03/2024 at 16:11. Pushed by nicolasfella into branch 'release/24.02'. DMA-BUF size may not match size from handleRemoteDesktopStarted() QScreen::size() marshalled from xdg-desktop-portal-kde uses logical scaled size but the DMA-BUF from pipewire is the physical pixel count. We now check the DMA-BUF size each frame and resize the QImage buffer when needed. Related: bug 478057, bug 464547 M +1 -0 framebuffers/pipewire/pw_framebuffer.cpp https://invent.kde.org/network/krfb/-/commit/966ad6a1639732f882284ff6e708b0e37e624ca7
(In reply to Jordan Pryde from comment #7) > (Manually making this comment since I didn't have a bug tracker account > until now - I got an email that this failed) > Fixed by https://invent.kde.org/network/krfb/-/merge_requests/63 in master > > @bug_id = 482929 > @bug_status = RESOLVED > @resolution = FIXED > @cf_commitlink = > https://invent.kde.org/network/krfb/-/commit/ > 966ad6a1639732f882284ff6e708b0e37e624ca7 > > Git commit 966ad6a1639732f882284ff6e708b0e37e624ca7 by Jordan Pryde. > Committed on 12/03/2024 at 16:11. > Pushed by nicolasfella into branch 'release/24.02'. > > DMA-BUF size may not match size from handleRemoteDesktopStarted() > > QScreen::size() marshalled from xdg-desktop-portal-kde uses logical > scaled size but the DMA-BUF from pipewire is the physical pixel count. > We now check the DMA-BUF size each frame and resize the QImage buffer when > needed. > Related: bug 478057, bug 464547 > > M +1 -0 framebuffers/pipewire/pw_framebuffer.cpp > > https://invent.kde.org/network/krfb/-/commit/ > 966ad6a1639732f882284ff6e708b0e37e624ca7 Just compiled it. Can confirm. The bug is no more. Can't believe it only took a single line of code to fix this bug. Thank you very much!