> On Jan. 6, 2015, 7:20 p.m., David Edmundson wrote:
> > src/platformtheme/kdeplatformsystemtrayicon.cpp, line 330
> > <https://git.reviewboard.kde.org/r/121885/diff/1/?file=338653#file338653line330>
> >
> >     the statusnotifierwatcher is a kded module, which means if another kded 
> > module tries to create an SNI (and at least one does) we're going to 
> > deadlock I think?
> 
> Martin Klapetek wrote:
>     Are we? I'm not sure really...how else could we do this then?
> 
> Martin Klapetek wrote:
>     Possibly we could cut off the $PID part of the service name and then 
> simply check for that service, though this API seems more robust
> 
> Martin Gräßlin wrote:
>     I cannot mentally construct a dead lock situation. Could you please 
> elaborate on what would dead lock?
> 
> David Edmundson wrote:
>     we're the kded, it's starting up.
>     We load the keyboard layout switching daemon
>     That tries creates a Status Notifier Item
>     
>     lib knotification queries if we're using the legacy tray, it's using the 
> QPA so it's using this code all in the same process
>     That makes a DBus call to org.kde.StatusNotifierWatcher and blocks for a 
> reply
>     
>     StatusNotifierWatcher is another kded module, it can't respond because 
> we're blocked awaiting a reply from ourselves.
> 
> Martin Gräßlin wrote:
>     > lib knotification queries if we're using the legacy tray, it's using 
> the QPA so it's using this code all in the same process
>     
>     is that really the case? This code here should only be run if sni is not 
> available.
> 
> David Edmundson wrote:
>     It must be, otherwise this patch wouldn't be solving anything.
>     
>     I imagine we're run when then is no SNI host (i.e plasmashell) available.

Ah right, I just realized I have no SNIs from kded, so I never hit the actual 
block, but on the initial startup after login, this might indeed be a problem.

So the only other option I see then is to retrieve a list of registered names 
and contains(org.kde.StatusNotifierHost-*);


- Martin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/121885/#review73291
-----------------------------------------------------------


On Jan. 6, 2015, 7:16 p.m., Martin Klapetek wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/121885/
> -----------------------------------------------------------
> 
> (Updated Jan. 6, 2015, 7:16 p.m.)
> 
> 
> Review request for KDE Frameworks.
> 
> 
> Bugs: 339707
>     https://bugs.kde.org/show_bug.cgi?id=339707
> 
> 
> Repository: frameworkintegration
> 
> 
> Description
> -------
> 
> The "org.kde.StatusNotifierWatcher" is just a watcher/helper, not the actual 
> systray object, that's "org.kde.StatusNotifierHost-$PID". Because Plasma 
> appends the PID, we cannot check directly for it being present on the bus, so 
> we check the org.kde.StatusNotifierWatcher.IsStatusNotifierHostRegistered 
> property that's meant to be used for this.
> 
> Plus QSystemTrayIcon::isSystemTrayAvailable() is actually returning always 
> true, because the Watcher is in kded and is /always/ present.
> 
> This also fixes many apps with KSNI crashing on plasma exit, bug 339707 
> (though I believe this is not the direct cause for that bug)
> 
> 
> Diffs
> -----
> 
>   src/platformtheme/kdeplatformsystemtrayicon.cpp b5e207c 
> 
> Diff: https://git.reviewboard.kde.org/r/121885/diff/
> 
> 
> Testing
> -------
> 
> Things do not crash anymore and the ::isSystemTrayAvailable() now returns 
> correct value.
> 
> 
> Thanks,
> 
> Martin Klapetek
> 
>

_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel

Reply via email to