[systemd-devel] sd-bus: ObjectManager difference with gdbus

Lennart Poettering lennart at poettering.net
Tue Apr 25 08:05:38 UTC 2017


On Tue, 25.04.17 09:54, David Herrmann (dh.herrmann at gmail.com) wrote:

> >> This change makes sure all objects have the built-in interfaces
> >> reported at all times. The GetManagedObjects() call didn't report them
> >> so far.
> >
> > Quite the contrary? If you look at the output from dbus-monitor above, you'll see that it is sd-bus that already *does* report all interfaces while gdbus doesnt?
> 
> No, it does not. sd-bus was inconsistent. See, there are 3 things
> involved in the Object-Manager:
> 
> Signal: InterfacesAdded
> Signal: InterfacesRemoved
> Call: GetManagedObjects
> 
> The first two signals are used to add and remove objects (and their
> respective interfaces) at runtime. The GetManagedObjects() call is
> used to bootstrap, that is, to get the initial set of objects (and
> their respective interfaces) when starting your application.
> 
> So far, sd-bus reported the builtin interfaces correctly via the
> signals, but did not return that information in the
> GetManagedObjects() call. My patch fixed this omission.
> The effect of this is that objects added/removed at runtime work fine,
> but if an object was there already when your application starts, then
> it will never be removed, since gdbus will see an interface-count
> mismatch (as you observed above).
> 
> Hence, the patch I provided fixes how sd-bus provides this
> information. It does *not* change any policy.
> 
> I think the 2 underlying problems you saw are bugs in both gdbus and
> sd-bus. The one in sd-bus I tried to fix above, the one in gdbus is
> only about counting interfaces and properly detecting negative
> interface-counts. The gdbus bug is non-severe, though, since it
> originates in a buggy remote client. So there is no hard reason to
> change gdbus there.

Could you please send the sd-bus side fix as PR?

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list