Bug 513463 - Crash after finishing screen recording in QtMultimedia/ffmpeg code
Summary: Crash after finishing screen recording in QtMultimedia/ffmpeg code
Status: REPORTED
Alias: None
Product: Spectacle
Classification: Applications
Component: General (other bugs)
Version First Reported In: 6.5.80
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: Noah Davis
URL:
Keywords: qt-crash
Depends on:
Blocks:
 
Reported: 2025-12-17 02:57 UTC by tempqd
Modified: 2025-12-22 21:59 UTC (History)
4 users (show)

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


Attachments
backtrace (118.79 KB, text/vnd.kde.kcrash-report)
2025-12-17 02:57 UTC, tempqd
Details

Note You need to log in before you can comment on or make changes to this bug.
Description tempqd 2025-12-17 02:57:52 UTC
Created attachment 187721 [details]
backtrace

Git master everything (openSUSE Krypton + packman codecs), Wayland.

When clicking "stop recording" tray icon, the spectacle window opens but just shows blank white instead of the recording for a second or two, and then crashes.

Happens for any codec afaict.

Long backtrace attached.
Comment 1 Nicolas Fella 2025-12-17 14:08:04 UTC
#4  std::__atomic_base<QReadWriteLockPrivate*>::load (this=0x28, __m=std::memory_order_relaxed) at /usr/include/c++/15/bits/atomic_base.h:828
#5  std::atomic<QReadWriteLockPrivate*>::load (this=0x28, __m=std::memory_order_relaxed) at /usr/include/c++/15/atomic:587
#6  QAtomicOps<QReadWriteLockPrivate*>::loadRelaxed<QReadWriteLockPrivate*> (_q_value=<error reading variable: Cannot access memory at address 0x28>) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qatomic_cxx11.h:203
#7  QBasicAtomicPointer<QReadWriteLockPrivate>::loadRelaxed (this=0x28) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qbasicatomic.h:171
#8  QReadWriteLock::tryLockForRead (this=0x28, timeout=...) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qreadwritelock.cpp:195
#9  0x00007fc2d8782d5d in QReadWriteLock::lockForRead (this=<optimized out>) at /usr/include/qt6/QtCore/qreadwritelock.h:69
#10 QReadLocker::relock (this=<synthetic pointer>) at /usr/include/qt6/QtCore/qreadwritelock.h:116
#11 QReadLocker::QReadLocker (this=<synthetic pointer>, areadWriteLock=<optimized out>) at /usr/include/qt6/QtCore/qreadwritelock.h:135
#12 QRhiValueMapper<QFFmpeg::TextureConverter>::get (this=0x7fc288002940, rhi=0x7fc2e03ffbb0) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/multimedia/qrhivaluemapper_p.h:112
#13 QFFmpegVideoBuffer::ensureTextureConverter (this=0x7fc2940013b0, rhi=...) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp:98
#14 QFFmpegVideoBuffer::initTextureConverter (this=0x7fc2940013b0, rhi=...) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp:85
#15 QFFmpegVideoBuffer::initTextureConverter (this=0x7fc2940013b0, rhi=...) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp:79
#16 0x00007fc2d8777c85 in QFFmpegVideoSink::onVideoFrameChanged (this=0x55f87ed259c0, frame=...) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/qffmpegvideosink.cpp:31
#17 0x00007fc330705058 in QPlatformVideoSink::setVideoFrame (this=0x55f87ed259c0, frame=...) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/multimedia/platform/qplatformvideosink.cpp:48
#18 0x00007fc2d878ec45 in QFFmpeg::VideoRenderer::renderInternal (this=<optimized out>, frame=...) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegvideorenderer.cpp:78
#19 0x00007fc2d878c09c in QFFmpeg::Renderer::doNextStep (this=0x55f87efd9f10) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegrenderer.cpp:165
#20 0x00007fc2d8788d67 in QFFmpeg::PlaybackEngineObject::doNextStep (this=0x55f87efd9f10, type=QFFmpeg::PlaybackEngineObject::StepType::Immediate) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegplaybackengineobject.cpp:130
#21 QFFmpeg::PlaybackEngineObject::scheduleNextStep (this=0x55f87efd9f10) at /usr/src/debug/qtmultimedia-everywhere-src-6.10.1/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegplaybackengineobject.cpp:106
#22 0x00007fc2d8780a56 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QFFmpeg::Frame>, void, void (QFFmpeg::Renderer::*)(QFFmpeg::Frame)>::call(void (QFFmpeg::Renderer::*)(QFFmpeg::Frame), QFFmpeg::Renderer*, void**)::{lambda()#1}::operator()() const (__closure=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:127
#23 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QFFmpeg::Frame>, void, void (QFFmpeg::Renderer::*)(QFFmpeg::Frame)>::call(void (QFFmpeg::Renderer::*)(QFFmpeg::Frame), QFFmpeg::Renderer*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QFFmpeg::Frame>, void, void (QFFmpeg::Renderer::*)(QFFmpeg::Frame)>::call(void (QFFmpeg::Renderer::*)(QFFmpeg::Frame), QFFmpeg::Renderer*, void**)::{lambda()#1}&&) (args=<optimized out>, fn=...) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:65
#24 QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QFFmpeg::Frame>, void, void (QFFmpeg::Renderer::*)(QFFmpeg::Frame)>::call (f=<optimized out>, o=<optimized out>, arg=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:126
#25 QtPrivate::FunctionPointer<void (QFFmpeg::Renderer::*)(QFFmpeg::Frame)>::call<QtPrivate::List<QFFmpeg::Frame>, void> (f=<optimized out>, o=<optimized out>, arg=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:174
#26 QtPrivate::QCallableObject<void (QFFmpeg::Renderer::*)(QFFmpeg::Frame), QtPrivate::List<QFFmpeg::Frame>, void>::impl (which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:545
#27 0x00007fc330e239c4 in QObject::event (this=<optimized out>, e=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/kernel/qobject.cpp:1413
#28 0x00007fc3335e7a78 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x55f87efd9f10, e=0x7fc278610780) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/widgets/kernel/qapplication.cpp:3305
#29 0x00007fc330dce298 in QCoreApplication::notifyInternal2 (receiver=0x55f87efd9f10, event=0x7fc278610780) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/kernel/qcoreapplication.cpp:1109
#30 0x00007fc330dce2dd in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/kernel/qcoreapplication.cpp:1549
#31 0x00007fc330dd093a in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x55f87f8c2040) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/kernel/qcoreapplication.cpp:1904
#32 0x00007fc33108ee07 in postEventSourceDispatch (s=0x7fc294000ff0) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/kernel/qeventdispatcher_glib.cpp:246
#33 0x00007fc32ce5db36 in ?? () from /lib64/libglib-2.0.so.0
#34 0x00007fc32ce60a28 in ?? () from /lib64/libglib-2.0.so.0
#35 0x00007fc32ce6126c in g_main_context_iteration () from /lib64/libglib-2.0.so.0
#36 0x00007fc33108ca28 in QEventDispatcherGlib::processEvents (this=0x7fc294000c40, flags=...) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#37 0x00007fc330ddc1ab in QEventLoop::exec (this=0x7fc28fff60f0, flags=...) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/global/qflags.h:77
#38 0x00007fc330ee1679 in QThread::exec (this=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qthread.cpp:672
#39 0x00007fc330f71e68 in operator() (__closure=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qthread_unix.cpp:437
#40 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=...) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qthread_unix.cpp:367
#41 QThreadPrivate::start (arg=0x55f87f05d8c0) at /usr/src/debug/qtbase-everywhere-src-6.10.1/src/corelib/thread/qthread_unix.cpp:397
#42 0x00007fc33049bdf1 in start_thread (arg=<optimized out>) at pthread_create.c:448
#43 0x00007fc330520c8c in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
Comment 2 Nate Graham 2025-12-18 21:05:59 UTC
Entirely in Qt; looks like a QtMultimedia/ffmpeg issue?
Comment 3 TraceyC 2025-12-22 21:59:21 UTC
spectacle-6.5.80git.20251216T142944~1d2a711/src/Main.cpp:140