X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-client%2Fentrygroup.c;h=e2fc3b9298e146e431f9f080f399b4f0fb7cf438;hb=acdec2c38860b6bc36328d20f5da6584787a368a;hp=e43a44fb8ae42b61db5785ce7f084d0141187d58;hpb=8c9cad6c47e2815a6396ad2ce527c74a323d7f7f;p=catta diff --git a/avahi-client/entrygroup.c b/avahi-client/entrygroup.c index e43a44f..e2fc3b9 100644 --- a/avahi-client/entrygroup.c +++ b/avahi-client/entrygroup.c @@ -41,10 +41,11 @@ void avahi_entry_group_set_state(AvahiEntryGroup *group, AvahiEntryGroupState state) { assert(group); - if (group->state == state) + if (group->state_valid && group->state == state) return; group->state = state; + group->state_valid = 1; if (group->callback) group->callback(group, state, group->userdata); @@ -82,9 +83,7 @@ static int retrieve_state(AvahiEntryGroup *group) { dbus_message_unref(message); dbus_message_unref(reply); - avahi_entry_group_set_state(group, (AvahiEntryGroupState) state); - - return AVAHI_OK; + return state; fail: if (dbus_error_is_set(&error)) { @@ -106,6 +105,7 @@ AvahiEntryGroup* avahi_entry_group_new (AvahiClient *client, AvahiEntryGroupCall DBusMessage *message = NULL, *reply = NULL; DBusError error; char *path; + int state; assert(client); @@ -124,7 +124,7 @@ AvahiEntryGroup* avahi_entry_group_new (AvahiClient *client, AvahiEntryGroupCall group->client = client; group->callback = callback; group->userdata = userdata; - group->state = AVAHI_ENTRY_GROUP_UNCOMMITED; + group->state_valid = 0; group->path = NULL; AVAHI_LLIST_PREPEND(AvahiEntryGroup, groups, client->groups, group); @@ -157,8 +157,12 @@ AvahiEntryGroup* avahi_entry_group_new (AvahiClient *client, AvahiEntryGroupCall goto fail; } - if (retrieve_state(group) < 0) + if ((state = retrieve_state(group)) < 0) { + avahi_client_set_errno(client, state); goto fail; + } + + avahi_entry_group_set_state(group, (AvahiEntryGroupState) state); dbus_message_unref(message); dbus_message_unref(reply); @@ -249,27 +253,40 @@ int avahi_entry_group_free(AvahiEntryGroup *group) { } int avahi_entry_group_commit(AvahiEntryGroup *group) { + int ret; assert(group); if (!group->path || !avahi_client_is_connected(group->client)) return avahi_client_set_errno(group->client, AVAHI_ERR_BAD_STATE); - return entry_group_simple_method_call(group, "Commit"); + if ((ret = entry_group_simple_method_call(group, "Commit")) < 0) + return ret; + + group->state_valid = 0; + return ret; } int avahi_entry_group_reset(AvahiEntryGroup *group) { + int ret; assert(group); if (!group->path || !avahi_client_is_connected(group->client)) return avahi_client_set_errno(group->client, AVAHI_ERR_BAD_STATE); - return entry_group_simple_method_call(group, "Reset"); + if ((ret = entry_group_simple_method_call(group, "Reset")) < 0) + return ret; + + group->state_valid = 0; + return ret; } int avahi_entry_group_get_state (AvahiEntryGroup *group) { assert (group); - return group->state; + if (group->state_valid) + return group->state; + + return retrieve_state(group); } AvahiClient* avahi_entry_group_get_client (AvahiEntryGroup *group) {