X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-client%2Fclient.c;h=90686fc6fabc8d635db35e9b700ce8909aaf0581;hb=d0a63590d4730eb0af3ec6027818cb62d50ea657;hp=2f9b870cc9e1cad1fdb3f96a147126b9f0b92394;hpb=dd7b86c0db7c2bd0c87d2eec4d65e75a7446023a;p=catta diff --git a/avahi-client/client.c b/avahi-client/client.c index 2f9b870..90686fc 100644 --- a/avahi-client/client.c +++ b/avahi-client/client.c @@ -595,6 +595,11 @@ fail: void avahi_client_free(AvahiClient *client) { assert(client); + if (client->bus) + /* Disconnect in advance, so that the free() functions won't + * issue needless server calls */ + dbus_connection_disconnect(client->bus); + while (client->groups) avahi_entry_group_free(client->groups); @@ -619,10 +624,8 @@ void avahi_client_free(AvahiClient *client) { while (client->record_browsers) avahi_record_browser_free(client->record_browsers); - if (client->bus) { - dbus_connection_disconnect(client->bus); + if (client->bus) dbus_connection_unref(client->bus); - } avahi_free(client->version_string); avahi_free(client->host_name); @@ -859,5 +862,8 @@ fail: int avahi_client_is_connected(AvahiClient *client) { assert(client); - return client->state == AVAHI_CLIENT_S_RUNNING || client->state == AVAHI_CLIENT_S_REGISTERING || client->state == AVAHI_CLIENT_S_COLLISION; + return + client->bus && + dbus_connection_get_is_connected(client->bus) && + (client->state == AVAHI_CLIENT_S_RUNNING || client->state == AVAHI_CLIENT_S_REGISTERING || client->state == AVAHI_CLIENT_S_COLLISION); }