Bug 483136 - plasmashell doesn't wait for kconf_update
Summary: plasmashell doesn't wait for kconf_update
Status: CONFIRMED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Startup process (show other bugs)
Version: master
Platform: Other Linux
: NOR major
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-03-10 17:07 UTC by Fabian Vogt
Modified: 2024-06-29 13:04 UTC (History)
3 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 Fabian Vogt 2024-03-10 17:07:57 UTC
openQA found that after upgraing from Plasma 5, the panel becomes floating: https://openqa.opensuse.org/tests/4003016#step/opensuse_welcome/17

One part of the issue was fixed by https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/4030. However, openQA was still unhappy. Looking at the journalctl output shows that kconf_update was still busy even after plasmashell launched.
While various other processes like kwin handle this, plasmashell does not: It neither waits for kconf_update nor is capable of handling runtime changes.

In this particular case it ended up reading plasmashellrc pre kconf_update (no "floating=" setting) and writing updated settings back (including "floating=1"). Depending on when kconf_update runs, three possible series of events can happen:

a) kconf_update completes, writing floating=0 and plasmashell ends up reading that -> success. Very unlikely to happen.
b) plasmashell reads plasmashellrc, then kconf_update runs and writes floating=0, then plasmashell ends up overwriting that with its internal default
c) b) plasmashell reads plasmashellrc, then plasmashell overwrites it with internal defaults (floating=1), then kconf_update runs an does nothing because floating is already present

FWICT plasmashell should be serialized to start only after kded is up. Calling KConfig::checkUpdate would probably result in more races (see kconfig documentation...). Using qdbus worked in my tests:

/usr/lib/systemd/user/plasma-plasmashell.service.d/waitforkded.conf:
[Service]
ExecStartPre=/usr/bin/qdbus6 org.kde.kded6 /kded org.kde.kded6.loadedModules: