Bug 491710 - Crash on exit
Summary: Crash on exit
Status: RESOLVED FIXED
Alias: None
Product: plasma-pa
Classification: Plasma
Component: applet (show other bugs)
Version: master
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-08-14 12:15 UTC by ratijas
Modified: 2024-08-14 12:44 UTC (History)
2 users (show)

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


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description ratijas 2024-08-14 12:15:48 UTC
SUMMARY

Applet often crashes on exit, especially easy to reproduce in plasmoidviewer.

           PID: 112243 (plasmoidviewer)
        Signal: 11 (SEGV)
  Command Line: plasmoidviewer -a org.kde.plasma.volume
    Executable: /usr/local/kde/usr/bin/plasmoidviewer


(gdb) bt
#0  0x000077c8732d15b2 in QThreadStorageData::get (this=0x0) at /usr/src/debug/qt6-base/qtbase/src/corelib/thread/qthreadstorage.cpp:86
#1  0x000077c8753c707f in QThreadStorage<QQmlAnimationTimer*>::hasLocalData (this=<optimized out>) at /usr/include/qt6/QtCore/qthreadstorage.h:105
#2  QQmlAnimationTimer::instance (create=create@entry=true) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/animations/qabstractanimationjob.cpp:65
#3  0x000077c8753c87ce in QAbstractAnimationJob::setState (this=0x77c85c008060, newState=QAbstractAnimationJob::Running)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/animations/qabstractanimationjob.cpp:306
#4  0x000077c875944729 in QQuickBehavior::write (this=<optimized out>, value=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/quick/util/qquickbehavior.cpp:419
#5  0x000077c87536ec75 in QQmlInterceptorMetaObject::doIntercept (this=this@entry=0x55f49deb7600, c=c@entry=QMetaObject::WriteProperty, id=id@entry=34, a=a@entry=0x7ffe23b086e0)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlvmemetaobject.cpp:380
#6  0x000077c87536f8dd in QQmlInterceptorMetaObject::intercept (this=0x55f49deb7600, c=QMetaObject::WriteProperty, id=34, a=0x7ffe23b086e0)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlvmemetaobject_p.h:150
#7  QQmlVMEMetaObject::metaCall (this=0x55f49deb7600, o=<optimized out>, c=QMetaObject::WriteProperty, _id=34, a=0x7ffe23b086e0)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlvmemetaobject.cpp:715
#8  0x000077c87524a939 in QQmlPropertyData::doMetacall<(QMetaObject::Call)2> (this=<optimized out>, object=<optimized out>, idx=<optimized out>, argv=0x7ffe23b086e0)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlpropertydata_p.h:358
#9  QQmlPropertyData::writeProperty (this=<optimized out>, target=<optimized out>, value=<optimized out>, flags=...)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlpropertydata_p.h:378
#10 0x000077c87526446e in GenericBinding<6>::write (this=0x55f49ddf9d80, result=0x7ffe23b087f0, type=..., isUndefined=<optimized out>, flags=...)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlbinding.cpp:210
#11 0x000077c87525fd3b in QQmlBinding::doUpdate (this=0x55f49ddf9d80, watcher=..., flags=..., scope=<optimized out>)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlbinding.cpp:690
#12 0x000077c87525ec9e in QQmlBinding::update (this=0x55f49ddf9d80, flags=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlbinding.cpp:164
#13 0x000077c8752dba4c in QQmlNotifier::emitNotify (endpoint=<optimized out>, a=0x0) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlnotifier.cpp:70
#14 0x000077c8731a144a in doActivate<false> (sender=0x55f49d4e4da0, signal_index=71, argv=0x0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:3976
#15 0x000077c87524a8f3 in QQmlPropertyData::writeProperty (this=<optimized out>, target=<optimized out>, value=<optimized out>, flags=...)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlpropertydata_p.h:336
#16 0x000077c875263a88 in GenericBinding<1>::doStore<bool> (this=<optimized out>, value=<optimized out>, pd=<optimized out>, flags=...) at /usr/include/qt6/QtCore/qtaggedpointer.h:120
#17 GenericBinding<1>::write (this=<optimized out>, result=..., isUndefined=<optimized out>, flags=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlbinding.cpp:236
#18 0x000077c87525f8ed in QQmlBinding::doUpdate (this=0x55f49d7f01b0, watcher=..., flags=..., scope=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlbinding.cpp:701
#19 0x000077c87525ec9e in QQmlBinding::update (this=0x55f49d7f01b0, flags=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlbinding.cpp:164
#20 0x000077c8752dba4c in QQmlNotifier::emitNotify (endpoint=<optimized out>, a=0x0) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlnotifier.cpp:70
#21 0x000077c8731a144a in doActivate<false> (sender=0x55f49dbc8000, signal_index=17, argv=0x0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:3976
#22 0x000077c8731a16f7 in QtPrivate::QSlotObjectBase::call (this=0x55f49d23a990, r=0x55f49dbc8000, a=0x7ffe23b0c030, this=<optimized out>, r=<optimized out>, a=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:469
#23 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4086
#24 0x000077c8533133bf in PulseAudioQt::Server::defaultSinkChanged (this=this@entry=0x55f49d230e60, _t1=<optimized out>)
    at /home/ratijas/kde/build/pulseaudio-qt/src/KF6PulseAudioQt_autogen/EWIEGA46WW/moc_server.cpp:218
#25 0x000077c85334d248 in PulseAudioQt::Server::updateDefaultDevices (this=0x55f49d230e60) at /home/ratijas/kde/src/pulseaudio-qt/src/server.cpp:124
#26 0x000077c8731a16f7 in QtPrivate::QSlotObjectBase::call (this=0x55f49d535f00, r=0x55f49d230e60, a=0x7ffe23b0c1f0, this=<optimized out>, r=<optimized out>, a=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:469
#27 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4086
#28 0x000077c853313273 in PulseAudioQt::MapBaseQObject::removed (this=this@entry=0x55f49d19c098, _t1=<optimized out>, _t1@entry=0, _t2=<optimized out>, _t2@entry=0x55f49dbc8000)
    at /home/ratijas/kde/build/pulseaudio-qt/src/KF6PulseAudioQt_autogen/EWIEGA46WW/moc_maps.cpp:207
#29 0x000077c85333d939 in PulseAudioQt::MapBase<PulseAudioQt::Sink, pa_sink_info>::removeEntry (this=this@entry=0x55f49d19c098, index=<optimized out>)
    at /home/ratijas/kde/src/pulseaudio-qt/src/maps.h:143
#30 0x000077c85332d17d in PulseAudioQt::MapBase<PulseAudioQt::Sink, pa_sink_info>::reset (this=0x55f49d19c098) at /home/ratijas/kde/src/pulseaudio-qt/src/maps.h:95
#31 PulseAudioQt::ContextPrivate::reset (this=0x55f49d19c090) at /home/ratijas/kde/src/pulseaudio-qt/src/context.cpp:742
#32 0x000077c85332e315 in PulseAudioQt::ContextPrivate::~ContextPrivate (this=0x55f49d19c090, __in_chrg=<optimized out>) at /home/ratijas/kde/src/pulseaudio-qt/src/context.cpp:353
#33 0x000077c85332f17c in PulseAudioQt::ContextPrivate::~ContextPrivate (this=0x55f49d19c090, __in_chrg=<optimized out>) at /home/ratijas/kde/src/pulseaudio-qt/src/context.cpp:341
#34 PulseAudioQt::Context::~Context (this=0x55f49d22b0e0, __in_chrg=<optimized out>) at /home/ratijas/kde/src/pulseaudio-qt/src/context.cpp:338
#35 0x000077c85333da34 in PulseAudioQt::Context::~Context (this=0x55f49d22b0e0, __in_chrg=<optimized out>) at /home/ratijas/kde/src/pulseaudio-qt/src/context.cpp:336
#36 std::default_delete<PulseAudioQt::Context>::operator() (this=<optimized out>, __ptr=0x55f49d22b0e0) at /usr/include/c++/14.2.1/bits/unique_ptr.h:93
#37 std::unique_ptr<PulseAudioQt::Context, std::default_delete<PulseAudioQt::Context> >::~unique_ptr (this=<optimized out>, __in_chrg=<optimized out>)
    at /usr/include/c++/14.2.1/bits/unique_ptr.h:398
#38 0x000077c872a4e891 in __run_exit_handlers (status=0, listp=0x77c872bf6680 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:108
#39 0x000077c872a4e95e in __GI_exit (status=<optimized out>) at exit.c:138
#40 0x000077c872a34e0f in __libc_start_call_main (main=main@entry=0x55f471c5aff0 <main(int, char**)>, argc=argc@entry=3, argv=argv@entry=0x7ffe23b0c488)
    at ../sysdeps/nptl/libc_start_call_main.h:74
#41 0x000077c872a34ecc in __libc_start_main_impl
    (main=0x55f471c5aff0 <main(int, char**)>, argc=3, argv=0x7ffe23b0c488, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe23b0c478)
    at ../csu/libc-start.c:360
#42 0x000055f471c5c895 in _start ()


STEPS TO REPRODUCE
1. plasmoidviewer -a org.kde.plasma.volume
2. Close the window

OBSERVED RESULT
Boom!

EXPECTED RESULT
no boom

SOFTWARE/OS VERSIONS
Operating System: Arch Linux 
KDE Plasma Version: 6.1.80
KDE Frameworks Version: 6.6.0
Qt Version: 6.7.2
Kernel Version: 6.10.4-arch2-1 (64-bit)
Graphics Platform: X11
pipewire, pipewire-audio, pipewire-alsa: 1:1.2.2-1
wireplumber: 0.5.5-1
Comment 1 Bug Janitor Service 2024-08-14 12:38:08 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-sdk/-/merge_requests/131
Comment 2 Harald Sitter 2024-08-14 12:44:01 UTC
Git commit edcfba811f348ac8ea4207437963ce3b7f68dd03 by Harald Sitter.
Committed on 14/08/2024 at 12:38.
Pushed by sitter into branch 'master'.

viewer: manage lifespan of View* properly

otherwise part of the viewing object tree outlives QThread(StorageData)
and explodes on exit

M  +11   -11   plasmoidviewer/main.cpp
M  +4    -4    plasmoidviewer/view.cpp
M  +1    -1    plasmoidviewer/view.h

https://invent.kde.org/plasma/plasma-sdk/-/commit/edcfba811f348ac8ea4207437963ce3b7f68dd03