Bug 524929 - Plasmashell crashes in Plasma::Applet::status() during System Tray update triggered while Weather IonControl is being destroyed
Summary: Plasmashell crashes in Plasma::Applet::status() during System Tray update tri...
Status: RESOLVED FIXED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Weather widget (other bugs)
Version First Reported In: 6.7.4
Platform: Fedora RPMs Linux
: NOR crash
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2026-08-29 15:07 UTC by k2mil
Modified: 2026-09-04 00:12 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 6.7.5
Sentry Crash Report:


Attachments
New crash information added by DrKonqi (202.23 KB, text/plain)
2026-08-29 15:07 UTC, k2mil
Details

Note You need to log in before you can comment on or make changes to this bug.
Description k2mil 2026-08-29 15:07:47 UTC
Application: plasmashell (6.7.4)

ApplicationNotResponding [ANR]: false
Qt Version: 6.11.1
Frameworks Version: 6.29.0
Operating System: Linux 7.1.10-200.fc44.x86_64 x86_64
Windowing System: Wayland
Distribution: "Fedora release 44 (Forty Four)"
DrKonqi: 6.7.4 [CoredumpBackend]

-- Information about the crash:
The crash occurs during startup of my Plasma user session. In most cases when this issue occurs, `plasmashell` crashes almost immediately after I log in to my Plasma session. However, the problem is not fully deterministic: it does not happen after every login, and some sessions start normally.

The crash has occurred repeatedly in this same general situation, i.e. during the first moments after logging in, when Plasma is initializing the desktop, panel, System Tray and its applets.

I obtained a core dump from one of these crashes and generated a fully symbolized backtrace using Fedora's debuginfod service. The crash itself occurs in:

`Plasma::Applet::status()`
`libplasma/src/plasma/applet.cpp:547`

called from:

`PlasmoidModel::data()`
`plasma-workspace/applets/systemtray/systemtraymodel.cpp:141`

while `SortedSystemTrayModel` is re-evaluating/sorting System Tray entries:

`SortedSystemTrayModel::lessThanSystemTray()`
`sortedsystemtraymodel.cpp:54`

`SortedSystemTrayModel::lessThan()`
`sortedsystemtraymodel.cpp:35`

The full stack is particularly interesting because the System Tray update appears to be triggered by an applet status change while another part of Plasma is already being destroyed.

The relevant sequence visible in the backtrace is approximately:

`QDBusServiceWatcher::serviceUnregistered()`
→ `PowerProfilesControl::onServiceUnregistered()` (`powerprofilescontrol.cpp:277`)
→ `PowerProfilesControl::updatePowerProfileCurrentProfile()` (`powerprofilescontrol.cpp:393`)
→ Qt property/QML binding notifications
→ `Plasma::Applet::statusChanged()`
→ `PlasmoidModel` emits `dataChanged()`
→ `SortedSystemTrayModel` starts re-evaluating the System Tray ordering
→ `PlasmoidModel::data()` requests another applet's status
→ `Plasma::Applet::status()`
→ SIGSEGV

At the same time, further down the same call stack, the Weather applet is in its destruction path. In particular, the backtrace contains:

`QEventDispatcherGlib::processEvents()`
→ `IonControl::~IonControl()` (`weather/ioncontrol_p.cpp:68` / `:71`)
→ `WeatherDataMonitor::~WeatherDataMonitor()` (`weatherdatamonitor_p.cpp:53`)
→ `ForecastControl::~ForecastControl()` (`forecastcontrol.cpp:72`)
→ QML/Plasmoid object destruction

This suggests that `IonControl::~IonControl()` is processing pending Qt events while the Weather applet object hierarchy is being torn down. During this nested event processing, a D-Bus `serviceUnregistered` notification is delivered to `PowerProfilesControl`, which causes a QML/property update and subsequently a System Tray model update.

The System Tray then performs sorting and calls `Plasma::Applet::status()` on an applet while destruction of Plasma/QML objects is already in progress.

Another potentially relevant detail is that the applet object whose `statusChanged()` signal initiates the System Tray update is not the same object on which the final crashing `Plasma::Applet::status()` call is made. This may indicate that a model-wide re-sort triggered by one applet causes the System Tray model to access another applet whose lifetime/state is no longer valid.

I therefore suspect a reentrancy/object-lifetime issue involving System Tray model updates during applet destruction. However, I cannot determine from the backtrace alone whether the actual defect is in the System Tray model, Weather applet teardown, PowerProfiles handling, or the interaction between these components.

I am attaching/pasting the complete symbolized backtrace because it contains source file and line information for Plasma, plasma-workspace, PowerDevil, kdeplasma-addons and Qt.

System information visible in the backtrace:

* Fedora 44
* Plasma 6.7.4
* plasma-workspace 6.7.4
* libplasma 6.7.4
* PowerDevil 6.7.4
* kdeplasma-addons 6.7.4
* Qt 6.11.1

The crash is intermittent, but when it happens it usually happens directly after logging in to the Plasma user session.

The crash can be reproduced sometimes.

-- Backtrace (Reduced):
#5  0x00007f246599fce8 in Plasma::Applet::status (this=this@entry=0x55df23653060) at /usr/src/debug/libplasma-6.7.4-1.fc44.x86_64/src/plasma/applet.cpp:547
#6  0x00007f24455bbfa4 in PlasmoidModel::data (this=0x55df2abad430, index=<optimized out>, role=258) at /usr/src/debug/plasma-workspace-6.7.4-1.fc44.x86_64/applets/systemtray/systemtraymodel.cpp:141
#7  0x00007f2462c19acd in QModelIndex::data (this=0x7ffdfab2e8c0, arole=258) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qabstractitemmodel.h:519
#8  QConcatenateTablesProxyModel::data (this=<optimized out>, index=<optimized out>, role=258) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp:215
#9  0x00007f24455c6a0b in QModelIndex::data (this=0x7ffdfab2eae0, arole=258) at /usr/include/qt6/QtCore/qabstractitemmodel.h:519
#10 SortedSystemTrayModel::lessThanSystemTray (this=0x55df2abb3300, left=<optimized out>, right=...) at /usr/src/debug/plasma-workspace-6.7.4-1.fc44.x86_64/applets/systemtray/sortedsystemtraymodel.cpp:54
#11 SortedSystemTrayModel::lessThan (this=0x55df2abb3300, left=..., right=...) at /usr/src/debug/plasma-workspace-6.7.4-1.fc44.x86_64/applets/systemtray/sortedsystemtraymodel.cpp:35
#12 0x00007f2462c31828 in operator() (__closure=0x7ffdfab2eb30, sourceRow=<optimized out>) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1387
#17 QSortFilterProxyModelPrivate::needsReorder (this=this@entry=0x55df2ab96050, source_rows=..., source_parent=...) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1379
#18 0x00007f2462c3d9b2 in QSortFilterProxyModelPrivate::_q_sourceDataChanged (this=0x55df2ab96050, source_top_left=<optimized out>, source_bottom_right=<optimized out>, roles=...) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1489
#19 0x00007f2462984eb7 in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=0x55df2abb3300, a=<optimized out>) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#20 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7ffdfab2ef00) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
[...]
#23 QAbstractItemModel::dataChanged (this=this@entry=0x55df2784eb00, _t1=..., _t2=..., _t3=...) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#24 0x00007f2462c18a0f in QConcatenateTablesProxyModelPrivate::slotDataChanged (this=<optimized out>, from=<optimized out>, to=<optimized out>, roles=...) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp:769
#25 0x00007f2462984eb7 in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=0x55df2784eb00, a=<optimized out>) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#26 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7ffdfab2f0e0) at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372


Reported using DrKonqi
This report was filed against 'kde' because the product 'plasmashell' could not be located in Bugzilla. Add it to drkonqi's mappings file!
Comment 1 k2mil 2026-08-29 15:07:48 UTC
Created attachment 195600 [details]
New crash information added by DrKonqi

DrKonqi auto-attaching complete backtrace.
Comment 2 Bug Janitor Service 2026-09-03 15:06:10 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/kdeplasma-addons/-/merge_requests/1121
Comment 3 Nate Graham 2026-09-03 23:30:53 UTC
Git commit 415e3a201e845b4f61dded1bd2a74f4e61bddce9 by Nate Graham, on behalf of Bohdan Onofriichuk.
Committed on 03/09/2026 at 22:26.
Pushed by ngraham into branch 'master'.

applets/weather: don't process pending events inside ioncontrol_p destructor

M  +0    -6    applets/weather/ioncontrol_p.cpp

https://invent.kde.org/plasma/kdeplasma-addons/-/commit/415e3a201e845b4f61dded1bd2a74f4e61bddce9
Comment 4 Nate Graham 2026-09-04 00:12:58 UTC
Git commit b69fd013b138244dd3d0c38812181bf30fc62a8c by Nate Graham.
Committed on 03/09/2026 at 23:50.
Pushed by ngraham into branch 'Plasma/6.7'.

applets/weather: don't process pending events inside ioncontrol_p destructor


(cherry picked from commit 415e3a201e845b4f61dded1bd2a74f4e61bddce9)

Co-authored-by: Bohdan Onofriichuk <bogdan.onofriuchuk@gmail.com>

M  +0    -6    applets/weather/ioncontrol_p.cpp

https://invent.kde.org/plasma/kdeplasma-addons/-/commit/b69fd013b138244dd3d0c38812181bf30fc62a8c