Bug 471129

Summary: Spectacle crash after very specific actions, crashes on new launch
Product: [Applications] Spectacle Reporter: BPMb <boudewijnbeckers>
Component: GeneralAssignee: Noah Davis <noahadvs>
Status: RESOLVED DUPLICATE    
Severity: crash CC: kde, nate, nicolas.fella
Priority: NOR Keywords: drkonqi
Version: 23.04.2   
Target Milestone: ---   
Platform: Neon   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description BPMb 2023-06-16 18:21:54 UTC
Application: spectacle (23.04.2)

Qt Version: 5.15.10
Frameworks Version: 5.107.0
Operating System: Linux 5.19.0-45-generic x86_64
Windowing System: Wayland
Distribution: KDE neon 5.27
DrKonqi: 5.27.5 [KCrashBackend]

-- Information about the crash:
Follow the steps below to reproduce:

1. Use the 'Capture Rectangular Region' shortcut
2. Select an area
3. Draw a red arrow (not sure if it's this specific but still)
4. Put some text next to it
5. Select text and change color from black to white
6. Press CTRL+C
7. Press the shortcut of step 1 again
8. Crash

The crash can be reproduced every time.

-- Backtrace:
Application: Spectacle (spectacle), signal: Aborted

[KCrash Handler]
#4  __pthread_kill_implementation (no_tid=0, signo=6, threadid=140182074594240) at ./nptl/pthread_kill.c:44
#5  __pthread_kill_internal (signo=6, threadid=140182074594240) at ./nptl/pthread_kill.c:78
#6  __GI___pthread_kill (threadid=140182074594240, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#7  0x00007f7eb9242476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#8  0x00007f7eb92287f3 in __GI_abort () at ./stdlib/abort.c:79
#9  0x00007f7eb96a2bbe in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#10 0x00007f7eb96ae24c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#11 0x00007f7eb96ae2b7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#12 0x00007f7eb96aefe5 in __cxa_pure_virtual () from /lib/x86_64-linux-gnu/libstdc++.so.6
#13 0x000056093d658a22 in SelectedActionWrapper::setEditAction (this=0x56093dc1f580, action=0x0) at ./src/Gui/Annotations/AnnotationDocument.cpp:561
#14 0x000056093d65f7b4 in AnnotationDocument::deselectAction (this=0x7f7ea8015310) at ./src/Gui/Annotations/AnnotationDocument.cpp:1436
#15 AnnotationDocument::clearAnnotations (this=0x7f7ea8015310) at ./src/Gui/Annotations/AnnotationDocument.cpp:928
#16 0x000056093d64f201 in AnnotationDocument::clear (this=0x7f7ea8015310) at ./src/Gui/Annotations/AnnotationDocument.cpp:842
#17 operator() (screenImages=..., __closure=0x56093dc20740) at ./src/SpectacleCore.cpp:129
#18 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const QVector<CanvasImage>&>, void, SpectacleCore::SpectacleCore(QObject*)::<lambda(const QVector<CanvasImage>&)> >::call (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#19 QtPrivate::Functor<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QVector<CanvasImage>&)>, 1>::call<QtPrivate::List<QVector<CanvasImage> const&>, void> (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#20 QtPrivate::QFunctorSlotObject<SpectacleCore::SpectacleCore(QObject*)::<lambda(const QVector<CanvasImage>&)>, 1, QtPrivate::List<const QVector<CanvasImage>&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x56093dc20730, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:443
#21 0x00007f7eb9cf4854 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x000056093d674296 in Platform::newScreensScreenshotTaken (_t1=..., this=<optimized out>) at ./obj-x86_64-linux-gnu/src/spectacle_autogen/UWYFJWVAJO/moc_Platform.cpp:298
#23 operator() (images=..., __closure=0x56093dc1d6a0) at ./src/Platforms/PlatformKWinWayland2.cpp:388
#24 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const QVector<QImage>&>, void, PlatformKWinWayland2::trackSource(ScreenShotSourceMeta2*)::<lambda(const QVector<QImage>&)> >::call (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#25 QtPrivate::Functor<PlatformKWinWayland2::trackSource(ScreenShotSourceMeta2*)::<lambda(const QVector<QImage>&)>, 1>::call<QtPrivate::List<QVector<QImage> const&>, void> (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#26 QtPrivate::QFunctorSlotObject<PlatformKWinWayland2::trackSource(ScreenShotSourceMeta2*)::<lambda(const QVector<QImage>&)>, 1, QtPrivate::List<const QVector<QImage>&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x56093dc1d690, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:443
#27 0x00007f7eb9cf4854 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#28 0x000056093d668d44 in ScreenShotSourceMeta2::finished (_t1=..., this=0x56093de7f950) at ./obj-x86_64-linux-gnu/src/spectacle_autogen/UWYFJWVAJO/moc_PlatformKWinWayland2.cpp:765
#29 ScreenShotSourceMeta2::handleSourceFinished (this=0x56093de7f950) at ./src/Platforms/PlatformKWinWayland2.cpp:246
#30 ScreenShotSourceMeta2::handleSourceFinished (this=0x56093de7f950) at ./src/Platforms/PlatformKWinWayland2.cpp:230
#31 0x00007f7eb9cf4854 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#32 0x000056093d670719 in ScreenShotSource2::finished (_t1=..., this=<optimized out>) at ./obj-x86_64-linux-gnu/src/spectacle_autogen/UWYFJWVAJO/moc_PlatformKWinWayland2.cpp:262
#33 operator() (__closure=0x56093dc4d810) at ./src/Platforms/PlatformKWinWayland2.cpp:180
#34 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, ScreenShotSource2::handleMetaDataReceived(const QVariantMap&)::<lambda()> >::call (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#35 QtPrivate::Functor<ScreenShotSource2::handleMetaDataReceived(const QVariantMap&)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#36 QtPrivate::QFunctorSlotObject<ScreenShotSource2::handleMetaDataReceived(const QVariantMap&)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x56093dc4d800, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:443
#37 0x00007f7eb9cf4854 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#38 0x00007f7eb9ad8fe5 in QFutureWatcherBase::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#39 0x00007f7ebb56c763 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#40 0x00007f7eb9cbcdda in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#41 0x00007f7eb9cbfec7 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#42 0x00007f7eb9d16c07 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#43 0x00007f7eb771bd3b in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#44 0x00007f7eb7771258 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#45 0x00007f7eb77193e3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#46 0x00007f7eb9d16258 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#47 0x00007f7eb9cbb6fb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#48 0x00007f7eb9cc3c94 in QCoreApplication::exec() () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#49 0x000056093d6218d7 in main (argc=<optimized out>, argv=<optimized out>) at ./src/Main.cpp:127
[Inferior 1 (process 9294) detached]

Reported using DrKonqi
Comment 1 Nate Graham 2023-09-15 16:08:55 UTC
A fascinatingly detailed set of steps to reproduce; I appreciate that. Unfortunately when I apply them as faithfully as I can on Plasma 6 Wayland, I can't make Spectacle crash.

Any chance you could try again with the recently released 23.08 version? Thanks a lot!
Comment 2 BPMb 2023-09-19 13:56:17 UTC
I run KDE Neon, I guess that would involve me to upgrade to the Developer Edition Stable Branch of KDE Neon?
Comment 3 Nate Graham 2023-09-19 15:44:32 UTC
Neon User Edition should be shipping that version fairly soon, if it hasn't already.
Comment 4 BPMb 2023-09-19 19:40:57 UTC
I have spectacle version 23.08.1:

spectacle -v
QSocketNotifier: Can only be used with threads started with QThread
spectacle 23.08.1
Comment 5 BPMb 2023-09-19 19:42:03 UTC
Forgot to add, the issue is still there. I'm not using Plasma 6 yet by the way, do you think that might be the cause?
Comment 6 Nate Graham 2023-09-20 17:25:21 UTC
Thanks.
Comment 7 Noah Davis 2023-09-25 05:37:37 UTC
I am able to reproduce this with git master spectacle and a Plasma 6 wayland session.
Comment 8 Noah Davis 2023-09-25 05:59:34 UTC
It seems to be some kind of issue with deselecting a text annotation action while clearing all annotations. This occurs when a new screenshot of any kind is taken. Technically, a rectangle capture screenshot first captures all screens, then allows you to crop the screenshot of all screens, which is why spectacle crashes when starting a rectangle capture screenshot rather than when accepting a selected region. Shortcuts are not necessary to reproduce this bug, but are a convenient for reproducing it.

The true steps to reproduce this bug are the following:

1. Do a screen capture of any kind using any method, but don't use the -i or --new-instance flags if using the terminal.
2. Add a text annotation without causing the annotation to lose the dotted outline it has while it's still considered selected by the annotation system.
3. Do a screen capture of any kind using any method, but don't use the -i or --new-instance flags if using the terminal.
Comment 9 Nicolas Fella 2023-12-22 23:24:32 UTC

*** This bug has been marked as a duplicate of bug 469919 ***