Fwd: How to (correctly) signal that a DBusObject was removed?
Nicolas SCHOEMAEKER <[email protected]>
| Newsgroups | gmane.comp.freedesktop.dbus |
|---|---|
| Message-ID | <[email protected]> |
Hi everyone, today I am wondering about the standard interface 'org.freedesktop.DBus.ObjectManager', and especially the 'InterfacesRemoved' signal. As per the documentation (https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager), it is said "The |InterfacesRemoved| signal is emitted whenever an object is removed or it loses one or more interfaces.". I understand that if object '/path/to/obj' loses its interfaces 'org.iface.one' and 'org.iface.two' then the first argument of the signal is the object path '/path/to/obj' and the second interface is an array of the two lost interfaces, so ['org.iface.one', 'org.iface.two']. What I'm not sure is when object at '/path/to/obj' is removed. A trivial example is if I have a phone book application which creates contacts at '/com/test/PhoneBook/Contacts/1', '/com/test/PhoneBook/Contacts/2', etc. and one contact is removed. This contacts (or more generally the removed object path) might implement several interfaces, and my question today is: should I emit the signal with all of the object's interfaces in the second argument, OR should I emit the signal with the second argument empty (thus "empty" being a special case to signal that the entire object path is removed)? I can't find any documentation on this, and since I am writing a binding, it's important that I get this right. My instincts tells me the latter is the best, because I can see several disadvantages to the former: - you have to do extra-work at the moment you delete the object path: you need to list the interfaces and send them - it makes more data to transmit - the receiver must also make extra work: removing all interfaces, and checking if the object path has any interfaces left, if no, delete it - I can totally see a problem with this when the receiver and the sender are not synced and at the moment the signal is received, the list of interfaces are not the same on both sides. So while waiting for your answer, I have implemented the latter method: whenever an object path is removed, I send an empty array which is a clear signal to delete the whole object path. Can you confirm? Thanks in advance, cheers! _______________________________________________ dbus mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dbus