Skip to content

systemtray: Fix race in DBusServiceObserver

When a service appears right after the ListNames() call finished, but before the QDBusPendingCallWatcher is set up, the ::serviceRegistered signal will be queued before the ListNames() response. As a result, the service will be ignored by DBusServiceObserver.

Switching to QDBusInterface::callWithCallback() ensures that the result slot is queued as soon as the response arrives, thus avoiding the race.

Credits go to Sam Edwards for identifying the problem in https://bugs.kde.org/show_bug.cgi?id=422111#c69

BUG: 422111

Merge request reports