Bug 469336

Summary: Crash in ViewerWindow::showInlineMessage() When Trying to Record Screen With Spectacle
Product: [Applications] Spectacle Reporter: Feng Lengshun <7erxk5uav>
Component: GeneralAssignee: Noah Davis <noahadvs>
Status: RESOLVED FIXED    
Severity: crash CC: 7erxk5uav, adampoke111, armoire.mountable405, duha.bugs, fabrice.salvaire, kde, med.medin.2014, nate, nerumo, patrick.liniger, sph, t.lobner, w0ie2m7jx, wish.rirf
Priority: HI Keywords: drkonqi
Version: 23.04.0   
Target Milestone: ---   
Platform: Neon   
OS: Linux   
Latest Commit: Version Fixed In: 24.02
Sentry Crash Report:
Attachments: New crash information added by DrKonqi

Description Feng Lengshun 2023-05-04 04:54:51 UTC
Application: spectacle (23.04.0)

Qt Version: 5.15.9
Frameworks Version: 5.105.0
Operating System: Linux 6.1.26-x64v3-xanmod1 x86_64
Windowing System: Wayland
Distribution: KDE neon 5.27
DrKonqi: 5.27.4 [KCrashBackend]

-- Information about the crash:
Spectacle, when run, doesn't show the Recording tab. Taking a screenshot makes the Recording tab appear. Tried to record screen, preview doesn't appear in spectacle, when recording is stopped, Spectacle crashed.

Might be an issue with pipewire -- I installed KDE Neon, then installed Wayland session and pipewire to go with it (though OBS Window / Screen recording worked just fine). Please tell me if there's any other info that might be useful.

The crash can be reproduced every time.

-- Backtrace:
Application: Spectacle (spectacle), signal: Segmentation fault

[KCrash Handler]
#4  0x00007fc93b6eff74 in QQuickView::rootObject() const () from /lib/x86_64-linux-gnu/libQt5Quick.so.5
#5  0x000056083d56d672 in ViewerWindow::showInlineMessage (this=0x0, qmlFile=..., properties=...) at ./src/Gui/ViewerWindow.cpp:146
#6  0x000056083d565636 in ViewerWindow::showSavedVideoMessage (messageArgument=..., this=0x0) at ./src/Gui/ViewerWindow.cpp:161
#7  operator() (path=..., __closure=0x56083e5d4e30) at ./src/SpectacleCore.cpp:225
#8  QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const QString&>, void, SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)> >::call (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#9  QtPrivate::Functor<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)>, 1>::call<QtPrivate::List<QString const&>, void> (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#10 QtPrivate::QFunctorSlotObject<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)>, 1, QtPrivate::List<const QString&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x56083e5d4e20, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:443
#11 0x00007fc93a2f41e4 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#12 0x000056083d589766 in VideoPlatform::recordingSaved (_t1=..., this=0x56083e5b6a90) at ./obj-x86_64-linux-gnu/src/spectacle_autogen/UWYFJWVAJO/moc_VideoPlatform.cpp:244
#13 operator() (__closure=0x56083e57de10) at ./src/Platforms/VideoPlatformWayland.cpp:56
#14 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, VideoPlatformWayland::startRecording(const QString&, VideoPlatform::RecordingMode, const RecordingOption&, bool)::<lambda()> >::call (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#15 QtPrivate::Functor<VideoPlatformWayland::startRecording(const QString&, VideoPlatform::RecordingMode, const RecordingOption&, bool)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#16 QtPrivate::QFunctorSlotObject<VideoPlatformWayland::startRecording(const QString&, VideoPlatform::RecordingMode, const RecordingOption&, bool)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x56083e57de00, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:443
#17 0x00007fc93a2f41e4 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#18 0x00007fc93a2e9bee in QObject::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#19 0x00007fc93bb6c793 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#20 0x00007fc93a2bc18a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#21 0x00007fc93a2bf277 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x00007fc93a316597 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#23 0x00007fc93791bd3b in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#24 0x00007fc9379706c8 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#25 0x00007fc9379193e3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#26 0x00007fc93a315be8 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#27 0x00007fc93a2baaab in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#28 0x00007fc93a2c3044 in QCoreApplication::exec() () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#29 0x000056083d537845 in main (argc=<optimized out>, argv=<optimized out>) at ./src/Main.cpp:109
[Inferior 1 (process 30828) detached]

Reported using DrKonqi
Comment 1 Nicolas Fella 2023-05-17 16:06:51 UTC
*** Bug 469897 has been marked as a duplicate of this bug. ***
Comment 2 Nate Graham 2023-05-22 21:48:43 UTC
*** Bug 470027 has been marked as a duplicate of this bug. ***
Comment 3 Stephane Travostino 2023-05-30 08:34:57 UTC
Created attachment 159344 [details]
New crash information added by DrKonqi

spectacle (23.04.1) using Qt 5.15.9

Was trying to record a video, clicked Finish recording, Spectacle crashed.

-- Backtrace (Reduced):
#4  0x00007fc611b23794 in QQuickView::rootObject() const () from /lib64/libQt5Quick.so.5
#5  0x000055b7fefab646 in ViewerWindow::showInlineMessage(QString const&, QMap<QString, QVariant> const&) ()
#7  0x00007fc6106e8651 in void doActivate<false>(QObject*, int, void**) () from /lib64/libQt5Core.so.5
#8  0x000055b7fefc7b83 in QtPrivate::QFunctorSlotObject<VideoPlatformWayland::startRecording(QString const&, VideoPlatform::RecordingMode, std::variant<QScreen*, QRect, QString> const&, bool)::{lambda()#2}, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) ()
#9  0x00007fc6106e8651 in void doActivate<false>(QObject*, int, void**) () from /lib64/libQt5Core.so.5
Comment 4 Nicolas Fella 2023-07-01 14:53:50 UTC
*** Bug 471830 has been marked as a duplicate of this bug. ***
Comment 5 medin 2023-11-12 20:36:42 UTC
This crash is always reproducible on :

Operating System: Manjaro Linux 
KDE Plasma Version: 5.27.9
KDE Frameworks Version: 5.111.0
Qt Version: 5.15.11
Kernel Version: 6.6.1-1-MANJARO (64-bit)
Graphics Platform: Wayland



Backtrace:

Core was generated by `/usr/bin/spectacle'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator-> (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:116
116         T *operator->() const noexcept
[Current thread is 1 (Thread 0x7f1c93abfe80 (LWP 10727))]
(gdb) bt
#0  QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator->() const (this=0x8, this=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:116
#1  qGetPtrHelper<QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const>(QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const&)
    (ptr=..., ptr=<optimized out>) at /usr/include/qt/QtCore/qglobal.h:1151
#2  QQuickView::d_func() const (this=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickview.h:111
#3  QQuickView::rootObject() const (this=this@entry=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickview.cpp:603
#4  0x0000558155231512 in ViewerWindow::showInlineMessage(QString const&, QMap<QString, QVariant> const&) (this=0x0, qmlFile=..., properties=...)
    at /usr/src/debug/spectacle/spectacle-23.08.3/src/Gui/ViewerWindow.cpp:146
#5  0x0000558155220cb6 in ViewerWindow::showSavedVideoMessage(QUrl const&) (messageArgument=..., this=0x0) at /usr/src/debug/spectacle/spectacle-23.08.3/src/Gui/ViewerWindow.cpp:161
#6  operator() (path=<optimized out>, __closure=0x558156b47710) at /usr/src/debug/spectacle/spectacle-23.08.3/src/SpectacleCore.cpp:233
#7  QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const QString&>, void, SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)> >::call
    (arg=<optimized out>, f=...) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#8  QtPrivate::Functor<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)>, 1>::call<QtPrivate::List<QString const&>, void> (arg=<optimized out>, f=...)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#9  QtPrivate::QFunctorSlotObject<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)>, 1, QtPrivate::List<const QString&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x558156b47700, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#10 0x00007f1ca6ed1097 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7fff926b6e40, r=<optimized out>, this=0x558156b47700, this=<optimized out>, r=<optimized out>, a=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#11 doActivate<false>(QObject*, int, void**) (sender=0x558156ac9350, signal_index=4, argv=0x7fff926b6e40) at kernel/qobject.cpp:3925
#12 0x000055815524f957 in VideoPlatform::recordingSaved(QString const&) (_t1=..., this=0x558156ac9350)
    at /usr/src/debug/spectacle/build/src/spectacle_autogen/include/moc_VideoPlatform.cpp:244
#13 operator() (__closure=0x558156f460d0) at /usr/src/debug/spectacle/spectacle-23.08.3/src/Platforms/VideoPlatformWayland.cpp:54
#14 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, VideoPlatformWayland::startRecording(const QString&, VideoPlatform::RecordingMode, const VideoPlatform::RecordingOption&, bool)::<lambda()> >::call (arg=<optimized out>, f=...) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#15 QtPrivate::Functor<VideoPlatformWayland::startRecording(const QString&, VideoPlatform::RecordingMode, const VideoPlatform::RecordingOption&, bool)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#16 QtPrivate::QFunctorSlotObject<VideoPlatformWayland::startRecording(const QString&, VideoPlatform::RecordingMode, const VideoPlatform::RecordingOption&, bool)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x558156f460c0, r=<optimized out>, a=<optimized out>, ret=<optimized out>)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#17 0x00007f1ca6ed1097 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7fff926b6f00, r=<optimized out>, this=0x558156f460c0, this=<optimized out>, r=<optimized out>, a=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#18 doActivate<false>(QObject*, int, void**) (sender=0x558156a94910, signal_index=8, argv=0x7fff926b6f00) at kernel/qobject.cpp:3925
#19 0x00007f1ca6ec3bd4 in QObject::event(QEvent*) (this=0x558156a94910, e=0x7f1c5c00ff90) at kernel/qobject.cpp:1347
#20 0x00007f1ca87788ff in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x558156a94910, e=0x7f1c5c00ff90) at kernel/qapplication.cpp:3640
#21 0x00007f1ca6e9c168 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x558156a94910, event=0x7f1c5c00ff90) at kernel/qcoreapplication.cpp:1064
#22 0x00007f1ca6ea10cb in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=0x0, event_type=0, data=0x5581569577b0) at kernel/qcoreapplication.cpp:1821
#23 0x00007f1ca6ee7138 in postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x558156978620) at kernel/qeventdispatcher_glib.cpp:277
#24 0x00007f1ca470df69 in g_main_dispatch (context=0x7f1c8c000ec0) at ../glib/glib/gmain.c:3476
#25 0x00007f1ca476c327 in g_main_context_dispatch_unlocked (context=0x7f1c8c000ec0) at ../glib/glib/gmain.c:4284
#26 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7f1c8c000ec0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
--Type <RET> for more, q to quit, c to continue without paging--c
#27 0x00007f1ca470c162 in g_main_context_iteration (context=0x7f1c8c000ec0, may_block=1) at ../glib/glib/gmain.c:4414
#28 0x00007f1ca6eeaf7c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x558156941220, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#29 0x00007f1ca6e9ae74 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fff926b7380, flags=..., flags@entry=...)
    at ../../include/QtCore/../../src/corelib/global/qflags.h:69
#30 0x00007f1ca6e9c313 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#31 0x00007f1ca733bf02 in QGuiApplication::exec() () at kernel/qguiapplication.cpp:1870
#32 0x00007f1ca8776cda in QApplication::exec() () at kernel/qapplication.cpp:2832
#33 0x00005581551fdb25 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/spectacle/spectacle-23.08.3/src/Main.cpp:127
Comment 6 duha.bugs 2024-02-06 20:55:55 UTC
Confirming this, can reproduce on:

Operating System: Arch Linux 
KDE Plasma Version: 5.27.10
KDE Frameworks Version: 5.114.0
Qt Version: 5.15.12
Kernel Version: 6.7.2-arch1-1 (64-bit)
Graphics Platform: offscreen
Processors: 12 × AMD Ryzen 5 2600X Six-Core Processor
Memory: 15.6 GiB of RAM
Graphics Processor: AMD Radeon RX 580 Series


For me it doesn't crash when I try to stop the recording but it doesn't stop the recording immediately. If I wait 5-10 seconds the recording stops without crash.
If I click stop recording and don't wait but take a screenshot crash with the same backtrace:


#6  QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator-> (this=0x8, this=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:116
#7  qGetPtrHelper<QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const> (ptr=..., ptr=<optimized out>) at /usr/include/qt/QtCore/qglobal.h:1151
#8  QQuickView::d_func (this=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickview.h:111
#9  QQuickView::rootObject (this=this@entry=0x0) at /usr/src/debug/qt5-declarative/qtdeclarative/src/quick/items/qquickview.cpp:603
#10 0x000063a9808fd512 in ViewerWindow::showInlineMessage (this=0x0, qmlFile=..., properties=...) at /usr/src/debug/spectacle/spectacle-23.08.4/src/Gui/ViewerWindow.cpp:146
#11 0x000063a9808eccb6 in ViewerWindow::showSavedVideoMessage (messageArgument=..., this=0x0) at /usr/src/debug/spectacle/spectacle-23.08.4/src/Gui/ViewerWindow.cpp:161
#12 operator() (path=<optimized out>, __closure=0x63a9824e6ae0) at /usr/src/debug/spectacle/spectacle-23.08.4/src/SpectacleCore.cpp:233
#13 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const QString&>, void, SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)> >::call (arg=<optimized out>, f=...) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#14 QtPrivate::Functor<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)>, 1>::call<QtPrivate::List<QString const&>, void> (arg=<optimized out>, f=...) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#15 QtPrivate::QFunctorSlotObject<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QString&)>, 1, QtPrivate::List<const QString&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x63a9824e6ad0, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
Comment 7 duha.bugs 2024-02-06 20:56:34 UTC
*** Bug 480961 has been marked as a duplicate of this bug. ***
Comment 8 duha.bugs 2024-02-06 21:37:19 UTC
Actually this is probably fixed with Plasma 6. I thought I can reproduce this with Git Master, but it seems to be a different unrelated problem on Plasma 6:  https://bugs.kde.org/show_bug.cgi?id=479058
Comment 9 Nate Graham 2024-02-15 18:14:12 UTC
*** Bug 474556 has been marked as a duplicate of this bug. ***
Comment 10 Nate Graham 2024-02-15 18:14:26 UTC
Fixed with the commits in https://invent.kde.org/graphics/spectacle/-/merge_requests/283.
Comment 11 Nate Graham 2024-02-15 18:14:30 UTC
*** Bug 480271 has been marked as a duplicate of this bug. ***
Comment 12 Nate Graham 2024-02-15 21:29:40 UTC
*** Bug 479801 has been marked as a duplicate of this bug. ***
Comment 13 Nate Graham 2024-02-15 22:34:03 UTC
*** Bug 479522 has been marked as a duplicate of this bug. ***
Comment 14 Noah Davis 2024-05-24 16:03:38 UTC
*** Bug 484733 has been marked as a duplicate of this bug. ***