Bug 477067 - plasmashell crashes on global theme change
Summary: plasmashell crashes on global theme change
Status: RESOLVED FIXED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Global Theme packages (show other bugs)
Version: master
Platform: Neon Linux
: NOR crash
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords: qt6
Depends on:
Blocks:
 
Reported: 2023-11-15 23:42 UTC by fanzhuyifan
Modified: 2024-04-09 20:14 UTC (History)
4 users (show)

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


Attachments
backtrace (50.23 KB, text/plain)
2023-11-15 23:42 UTC, fanzhuyifan
Details

Note You need to log in before you can comment on or make changes to this bug.
Description fanzhuyifan 2023-11-15 23:42:21 UTC
Created attachment 163206 [details]
backtrace

Application: plasmashell (5.81.0)

Qt Version: 6.6.0
Frameworks Version: 5.245.0
Operating System: Linux 6.2.0-36-generic x86_64
Windowing System: Wayland
Distribution: KDE neon Unstable Edition
DrKonqi: 5.81.0 [CoredumpBackend]

-- Information about the crash:
Steps to reproduce:

1. open settings, go to global theme
2. select any different theme, select both appearance settings and desktop and window layout
3. click apply

Observed behavior:
plasmashell crashes

The crash can be reproduced every time.

-- Backtrace:
Application: plasmashell (plasmashell), signal: Segmentation fault
Comment 1 Marco Martin 2023-11-16 09:48:27 UTC
The backtrace doesn't have many symbols, but is definitely an assert, would be nice to see from terminal outpupt what the assert message is
Comment 2 Marco Martin 2023-11-16 10:06:35 UTC
reproduced.

the assert is

ASSERT: "corona()" in file /home/diau/kf6/src/plasma-framework/src/plasma/containment.cpp, line 481
Comment 3 Marco Martin 2023-11-16 10:13:50 UTC
complete bt:

ASSERT: "corona()" in file /home/diau/kf6/src/plasma-framework/src/plasma/containment.cpp, line 481

Thread 1 "plasmashell" received signal SIGABRT, Aborted.
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140737222777536) at ./nptl/pthread_kill.c:44
44      ./nptl/pthread_kill.c: No such file or directory.
(gdb) bt
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737222777536) at ./nptl/pthread_kill.c:44
#1  __pthread_kill_internal (signo=6, threadid=140737222777536) at ./nptl/pthread_kill.c:78
#2  __GI___pthread_kill (threadid=140737222777536, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3  0x00007ffff4242476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4  0x00007ffff42287f3 in __GI_abort () at ./stdlib/abort.c:79
#5  0x00007ffff4ab7c18 in qAbort() () at ./src/corelib/global/qglobal.cpp:161
#6  0x00007ffff4af4050 in qt_message_fatal<QString&> (message=..., context=<optimized out>)
    at ./src/corelib/global/qlogging.cpp:2003
#7  qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *)
    (msgType=QtFatalMsg, context=..., msg=<optimized out>, ap=<optimized out>)
    at ./src/corelib/global/qlogging.cpp:378
#8  0x00007ffff4ab8601 in QMessageLogger::fatal(char const*, ...) const
    (this=this@entry=0x7fffffffcdb8, msg=msg@entry=0x7ffff4daf0a8 "ASSERT: \"%s\" in file %s, line %d")
    at ./src/corelib/global/qlogging.cpp:901
#9  0x00007ffff4ab8660 in qt_assert(char const*, char const*, int)
    (assertion=<optimized out>, file=<optimized out>, line=<optimized out>)
    at ./src/corelib/global/qassert.cpp:68
#10 0x00007ffff77d3581 in Plasma::Containment::screen() const (this=0x555555ea5f90)
    at /home/diau/kf6/src/plasma-framework/src/plasma/containment.cpp:481
#11 0x00007ffff77d04f0 in operator()(int) const (__closure=0x555555ebc520, screenId=-1)
    at /home/diau/kf6/src/plasma-framework/src/plasma/containment.cpp:78
#12 0x00007ffff77d72cd in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, Plasma::Containment::init()::<lambda(int)> >::call(struct {...} &, void **) (f=..., arg=0x7fffffffd000)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:137
#13 0x00007ffff77d7181 in QtPrivate::Functor<Plasma::Containment::init()::<lambda(int)>, 1>::call<QtPrivate::List<int>, void>(struct {...} &, void *, void **) (f=..., arg=0x7fffffffd000)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:339
#14 0x00007ffff77d6f28 in QtPrivate::QCallableObject<Plasma::Containment::init()::<lambda(int)>, QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *)
--Type <RET> for more, q to quit, c to continue without paging--
    (which=1, this_=0x555555ebc510, r=0x555555ea5f90, a=0x7fffffffd000, ret=0x0)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:522
#15 0x00007ffff4ba5912 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7fffffffd000, r=0x555555ea5f90, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:433
#16 doActivate<false>(QObject*, int, void**) (sender=0x555555bc71f0, signal_index=7, argv=0x7fffffffd000)
    at ./src/corelib/kernel/qobject.cpp:4021
#17 0x00007ffff77f8fff in Plasma::Corona::availableScreenRegionChanged(int) (this=0x555555bc71f0, _t1=-1)
    at /home/diau/kf6/build/plasma-framework/src/plasma/KF6Plasma_autogen/include/moc_corona.cpp:627
#18 0x000055555563c14b in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (Plasma::Corona::*)(int)>::call(void (Plasma::Corona::*)(int), Plasma::Corona*, void**)
     (f=(void (Plasma::Corona::*)(class Plasma::Corona * const, int)) 0x7ffff77f8f9e <Plasma::Corona::availableScreenRegionChanged(int)>, o=0x555555bc71f0, arg=0x7fffffffd1e0)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:145
#19 0x0000555555633e66 in QtPrivate::FunctionPointer<void (Plasma::Corona::*)(int)>::call<QtPrivate::List<int>, void>(void (Plasma::Corona::*)(int), Plasma::Corona*, void**)
     (f=(void (Plasma::Corona::*)(class Plasma::Corona * const, int)) 0x7ffff77f8f9e <Plasma::Corona::availableScreenRegionChanged(int)>, o=0x555555bc71f0, arg=0x7fffffffd1e0)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:182
#20 0x000055555562bad9 in QtPrivate::QCallableObject<void (Plasma::Corona::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x555555b9f750, r=0x555555bc71f0, a=0x7fffffffd1e0, ret=0x0)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:520
#21 0x00007ffff4ba5912 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7fffffffd1e0, r=0x555555bc71f0, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:433
#22 doActivate<false>(QObject*, int, void**) (sender=0x555555bc71f0, signal_index=8, argv=0x7fffffffd1e0)
    at ./src/corelib/kernel/qobject.cpp:4021
#23 0x00007ffff77f9077 in Plasma::Corona::availableScreenRectChanged(int) (this=0x555555bc71f0, _t1=-1)
--Type <RET> for more, q to quit, c to continue without paging--
    at /home/diau/kf6/build/plasma-framework/src/plasma/KF6Plasma_autogen/include/moc_corona.cpp:634
#24 0x0000555555601c5c in ShellCorona::panelContainmentDestroyed(QObject*)
     (this=0x555555bc71f0, obj=0x555555e610b0) at /home/diau/kf6/src/plasma-workspace/shell/shellcorona.cpp:1505
#25 0x000055555563f92e in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QObject*>, void, void (ShellCorona::*)(QObject*)>::call(void (ShellCorona::*)(QObject*), ShellCorona*, void**)
     (f=(void (ShellCorona::*)(class ShellCorona * const, class QObject *)) 0x555555601bb4 <ShellCorona::panelContainmentDestroyed(QObject*)>, o=0x555555bc71f0, arg=0x7fffffffd400)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:145
#26 0x000055555563903e in QtPrivate::FunctionPointer<void (ShellCorona::*)(QObject*)>::call<QtPrivate::List<QObject*>, void>(void (ShellCorona::*)(QObject*), ShellCorona*, void**)
     (f=(void (ShellCorona::*)(class ShellCorona * const, class QObject *)) 0x555555601bb4 <ShellCorona::panelContainmentDestroyed(QObject*)>, o=0x555555bc71f0, arg=0x7fffffffd400)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:182
#27 0x00005555556312af in QtPrivate::QCallableObject<void (ShellCorona::*)(QObject*), QtPrivate::List<QObject*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x555557634c40, r=0x555555bc71f0, a=0x7fffffffd400, ret=0x0)
    at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:520
#28 0x00007ffff4ba5912 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
    (a=0x7fffffffd400, r=0x555555bc71f0, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:433
#29 doActivate<false>(QObject*, int, void**) (sender=0x555555e610b0, signal_index=0, argv=0x7fffffffd400)
    at ./src/corelib/kernel/qobject.cpp:4021
#30 0x00007ffff4ba01e3 in QObject::destroyed(QObject*) (this=<optimized out>, _t1=<optimized out>)
    at ./obj-x86_64-linux-gnu/src/corelib/kernel/moc_qobject.cpp:272
#31 0x00007ffff4b8ec54 in QObject::~QObject() (this=<optimized out>, this=<optimized out>)
    at ./src/corelib/kernel/qobject.cpp:1061
#32 0x00007ffff77bab83 in Plasma::Applet::~Applet() (this=0x555555e610b0, __in_chrg=<optimized out>)
    at /home/diau/kf6/src/plasma-framework/src/plasma/applet.cpp:90
#33 0x00007ffff77d03ec in Plasma::Containment::~Containment() (this=0x555555e610b0, __in_chrg=<optimized out>)
--Type <RET> for more, q to quit, c to continue without paging--
    at /home/diau/kf6/src/plasma-framework/src/plasma/containment.cpp:66
#34 0x00007ffff77d0410 in Plasma::Containment::~Containment() (this=0x555555e610b0, __in_chrg=<optimized out>)
    at /home/diau/kf6/src/plasma-framework/src/plasma/containment.cpp:66
#35 0x00007ffff4b8f5f1 in QObject::event(QEvent*) (this=0x555555e610b0, e=0x55555758fe70)
    at ./src/corelib/kernel/qobject.cpp:1424
#36 0x00007ffff5d90f58 in QApplicationPrivate::notify_helper(QObject*, QEvent*)
    (this=<optimized out>, receiver=0x555555e610b0, e=0x55555758fe70)
    at ./src/widgets/kernel/qapplication.cpp:3290
#37 0x00007ffff4b51e98 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
    (receiver=0x555555e610b0, event=0x55555758fe70) at ./src/corelib/kernel/qcoreapplication.cpp:1118
#38 0x00007ffff4b52085 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
    (receiver=0x0, event_type=0, data=0x555555750040) at ./src/corelib/kernel/qcoreapplication.cpp:1898
#39 0x00007ffff4d481f7 in postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x55555575cbe0)
    at ./src/corelib/kernel/qeventdispatcher_glib.cpp:243
#40 0x00007ffff329ed3b in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#41 0x00007ffff32f4258 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#42 0x00007ffff329c3e3 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#43 0x00007ffff4d4609e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
    (this=0x555555753fb0, flags=...) at ./src/corelib/kernel/qeventdispatcher_glib.cpp:393
#44 0x00007ffff4b5cb5a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
    (this=0x7fffffffd970, flags=...) at ./src/corelib/global/qflags.h:34
#45 0x00007ffff4b55c66 in QCoreApplication::exec() () at ./src/corelib/global/qflags.h:74
#46 0x00005555555a9c98 in main(int, char**) (argc=1, argv=0x7fffffffddb8)
    at /home/diau/kf6/src/plasma-workspace/shell/main.cpp:230
Comment 4 Bug Janitor Service 2023-11-16 13:10:04 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-framework/-/merge_requests/967
Comment 5 Marco Martin 2023-11-17 09:06:10 UTC
Git commit faf8f617a661caabc6f276b108aceb3e0e64296c by Marco Martin.
Committed on 17/11/2023 at 10:06.
Pushed by mart into branch 'master'.

Different way to deduce systray's corona

when unloading the shell due to look and feel change,
as object get deleted from the parent to the children,
the panel gets deleted and during its dtor before the
children (the systray container and then the systray)
get actually deleted, corona emits an
availableScreenRect/RegionChanged, the systray containment
searches for its own screen, but it can't find its corona
anymore because a containment in the hierarchy is not
a containment anymore but just a QObject

M  +9    -7    src/plasma/containment.cpp

https://invent.kde.org/plasma/plasma-framework/-/commit/faf8f617a661caabc6f276b108aceb3e0e64296c
Comment 6 fanzhuyifan 2023-11-18 16:31:19 UTC
Can confirm this is fixed on latest neon unstable, thanks!