diff options
author | Lucas De Marchi <lucas.demarchi@profusion.mobi> | 2013-01-04 01:33:44 -0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2013-01-03 21:35:24 -0800 |
commit | 98591410d7ddb7d27b266c4644f3f768166531a9 (patch) | |
tree | 23dc76a2e547b1aa6508c4cd9caa1c7d0272908f | |
parent | 453a9472dd506a2ba8fcd93f660eb1ad9af5f1e5 (diff) | |
download | pacrunner-98591410d7ddb7d27b266c4644f3f768166531a9.tar.gz |
gdbus: Don't include just added interfaces in GetManagedObjects
If we received a call to ObjectManager.GetManagedObject we should not
include in the response the interfaces in data->added. This is because
it's not guaranteed that those interfaces will trigger an
InterfacesAdded signal, which is the case if the interface is removed in
the same mainloop iteration.
-rw-r--r-- | gdbus/object.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gdbus/object.c b/gdbus/object.c index 2b6ae31..e569acb 100644 --- a/gdbus/object.c +++ b/gdbus/object.c @@ -1064,6 +1064,7 @@ static const GDBusMethodTable introspect_methods[] = { static void append_interfaces(struct generic_data *data, DBusMessageIter *iter) { DBusMessageIter array; + GSList *l; dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING @@ -1075,7 +1076,12 @@ static void append_interfaces(struct generic_data *data, DBusMessageIter *iter) DBUS_DICT_ENTRY_END_CHAR_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &array); - g_slist_foreach(data->interfaces, append_interface, &array); + for (l = data->interfaces; l != NULL; l = l->next) { + if (g_slist_find(data->added, l->data)) + continue; + + append_interface(l->data, &array); + } dbus_message_iter_close_container(iter, &array); } |