Bug 450663

Summary: Deleting Panel with Panel Spacers on it crashes Plasma in PanelSpacer::containmentGraphicObject()
Product: [Plasma] plasmashell Reporter: Nate Graham <nate>
Component: Panel Spacer widgetAssignee: Plasma Bugs List <plasma-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: aleixpol
Priority: NOR    
Version: master   
Target Milestone: 1.0   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed In: 5.25.3
Sentry Crash Report:

Description Nate Graham 2022-02-21 17:08:31 UTC
Steps to reproduce
1. Create a new empty panel
2. Put an applet on it, and a Panel Spacer applet on each side
3. Delete the panel
4. Click the "Close" button on the "Undo deleting this panel?" notification (this will actually perform the deletion in the background)

Plasma then crashes:

#0  __pthread_kill_implementation
    (threadid=<optimized out>, signo=signo@entry=11, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x00007fe9825958f3 in __pthread_kill_internal (signo=11, threadid=<optimized out>)
    at pthread_kill.c:78
#2  0x00007fe9825486a6 in __GI_raise (sig=11) at ../sysdeps/posix/raise.c:26
#3  0x00007fe9850bba09 in KCrash::defaultCrashHandler(int) (sig=11)
    at /home/nate/kde/src/kcrash/src/kcrash.cpp:624
#4  0x00007fe982548750 in <signal handler called> () at /lib64/libc.so.6
#5  0x00007fe982cf8b3c in QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator->() const (this=<optimized out>)
    at ../../include/QtCore/../../src/corelib/tools/qscopedpointer.h:118
#6  qGetPtrHelper<QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const>(QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const&) (ptr=<optimized out>)
    at ../../include/QtCore/../../src/corelib/global/qglobal.h:1143
#7  QObject::d_func() const (this=<optimized out>) at kernel/qobject.h:132
#8  QObject::property(char const*) const
    (this=0x0, name=name@entry=0x7fe96807f256 "_plasma_graphicObject") at kernel/qobject.cpp:4085
#9  0x00007fe96807ce53 in PanelSpacer::containmentGraphicObject() const (this=<optimized out>)
    at /home/nate/kde/src/plasma-workspace/applets/panelspacer/plugin/panelspacer.cpp:126
#10 0x00007fe96807c631 in PanelSpacer::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
    (_a=<optimized out>, _id=<optimized out>, _c=<optimized out>, _o=<optimized out>)
    at /home/nate/kde/build/plasma-workspace/applets/panelspacer/plugin/org.kde.plasma.panelspacer_autogen/EWIEGA46WW/moc_panelspacer.cpp:183
#11 PanelSpacer::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
    (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /home/nate/kde/build/plasma-workspace/applets/panelspacer/plugin/org.kde.plasma.panelspacer_autogen/EWIEGA46WW/moc_panelspacer.cpp:149
#12 0x00007fe984677e81 in QQmlPropertyData::readProperty(QObject*, void*) const
    (property=0x7ffc6aa04120, target=<optimized out>, this=0x2097b58)
    at ../../include/QtQml/5.15.2/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:357
#13 loadProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData const&)
    (v4=0x12648e0, object=0x14b2d30, property=...) at jsruntime/qv4qobjectwrapper.cpp:138
#14 0x00007fe8fff233ed in  ()
#15 0x00007ffc6aa04390 in  ()
#16 0x0000000000000021 in  ()
#17 0x00007fe8fff23000 in  ()
#18 0x0000000000000000 in  ()
Comment 2 Nate Graham 2022-07-09 22:14:49 UTC
Git commit 65fe6b864d5bd5e49d2e0b021823d97ea377e545 by Nate Graham, on behalf of Dominic Hayes.
Committed on 09/07/2022 at 22:14.
Pushed by ngraham into branch 'master'.

Fix "PanelSpacer::containmentGraphicObject()" plasmashell segfault

This one-liner fix is from Aleix Pol, and fixes the following:

- Crashes when deleting panels with Panel Spacer instances on them
  (as described in the bug ID named above)
- Potentially endless crash looping when running `plasmashell --replace`
  while a Panel Spacer is on at least one panel

Co-authored-by: Aleix Pol <aleixpol@kde.org>
FIXED-IN: 5.25.3

M  +1    -0    applets/panelspacer/plugin/panelspacer.cpp

https://invent.kde.org/plasma/plasma-workspace/commit/65fe6b864d5bd5e49d2e0b021823d97ea377e545
Comment 3 Nate Graham 2022-07-09 22:15:43 UTC
Git commit db0f5e68f26bc65d666fad1a9f16fbada3c0909b by Nate Graham, on behalf of Dominic Hayes.
Committed on 09/07/2022 at 22:15.
Pushed by ngraham into branch 'Plasma/5.25'.

Fix "PanelSpacer::containmentGraphicObject()" plasmashell segfault

This one-liner fix is from Aleix Pol, and fixes the following:

- Crashes when deleting panels with Panel Spacer instances on them
  (as described in the bug ID named above)
- Potentially endless crash looping when running `plasmashell --replace`
  while a Panel Spacer is on at least one panel

Co-authored-by: Aleix Pol <aleixpol@kde.org>
FIXED-IN: 5.25.3


(cherry picked from commit 65fe6b864d5bd5e49d2e0b021823d97ea377e545)

M  +1    -0    applets/panelspacer/plugin/panelspacer.cpp

https://invent.kde.org/plasma/plasma-workspace/commit/db0f5e68f26bc65d666fad1a9f16fbada3c0909b