On Tue, Apr 25, 2017 at 09:54:45AM +0200, David Herrmann wrote: >On Tue, Apr 25, 2017 at 9:40 AM, David Härdeman <da...@hardeman.nu> wrote: >> April 21, 2017 1:22 PM, "David Herrmann" <dh.herrm...@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.
Ok, I've tried the patch. It seems to fix things insofar that InterfacesAdded/InterfacesRemoved/GetManagedObjects all report 5 interfaces (checked with dbus-monitor). gdbus still gets royally confused though. It seems to report 5 interfaces for objects which are added dynamically (i.e. signalled via InterfacesAdded) and 1 interface for objects which are generated via GetManagedObjects (even though the sd-bus server reports 5 interfaces). I'll start working on a testcase... -- David Härdeman _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/systemd-devel