X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fresolve-service.c;h=0ecd388bda8681248fd4acc3981c639a55a9f07f;hb=5867849876e19996fd05a0d4917cb739904519c1;hp=333f2578ff9b876e21e7cdf028612cf5739adee2;hpb=15aaf28f0345ed6998ef6eae921c7750c4ce26f9;p=catta diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c index 333f257..0ecd388 100644 --- a/avahi-core/resolve-service.c +++ b/avahi-core/resolve-service.c @@ -84,12 +84,12 @@ static void finish(AvahiSServiceResolver *r, AvahiResolverEvent event) { switch (r->address_record->key->type) { case AVAHI_DNS_TYPE_A: - a.family = AVAHI_PROTO_INET; + a.proto = AVAHI_PROTO_INET; a.data.ipv4 = r->address_record->data.a.address; break; case AVAHI_DNS_TYPE_AAAA: - a.family = AVAHI_PROTO_INET6; + a.proto = AVAHI_PROTO_INET6; a.data.ipv6 = r->address_record->data.aaaa.address; break; @@ -157,8 +157,16 @@ static void record_browser_callback(AvahiSRecordBrowser*rr, AvahiIfIndex interfa if (!r->srv_record) { r->srv_record = avahi_record_ref(record); changed = 1; - - assert(!r->record_browser_a && !r->record_browser_aaaa); + + if (r->record_browser_a) { + avahi_s_record_browser_free(r->record_browser_a); + r->record_browser_a = NULL; + } + + if (r->record_browser_aaaa) { + avahi_s_record_browser_free(r->record_browser_aaaa); + r->record_browser_aaaa = NULL; + } if (r->address_protocol == AVAHI_PROTO_INET || r->address_protocol == AVAHI_PROTO_UNSPEC) { AvahiKey *k = avahi_key_new(r->srv_record->data.srv.name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_A); @@ -200,10 +208,11 @@ static void record_browser_callback(AvahiSRecordBrowser*rr, AvahiIfIndex interfa } else { assert(event == AVAHI_BROWSER_REMOVE); + switch (record->key->type) { case AVAHI_DNS_TYPE_SRV: - if (avahi_record_equal_no_ttl(record, r->srv_record)) { + if (r->srv_record && avahi_record_equal_no_ttl(record, r->srv_record)) { avahi_record_unref(r->srv_record); r->srv_record = NULL; @@ -216,7 +225,7 @@ static void record_browser_callback(AvahiSRecordBrowser*rr, AvahiIfIndex interfa case AVAHI_DNS_TYPE_TXT: - if (avahi_record_equal_no_ttl(record, r->txt_record)) { + if (r->txt_record && avahi_record_equal_no_ttl(record, r->txt_record)) { avahi_record_unref(r->txt_record); r->txt_record = NULL; @@ -229,7 +238,7 @@ static void record_browser_callback(AvahiSRecordBrowser*rr, AvahiIfIndex interfa case AVAHI_DNS_TYPE_A: case AVAHI_DNS_TYPE_AAAA: - if (avahi_record_equal_no_ttl(record, r->address_record)) { + if (r->address_record && avahi_record_equal_no_ttl(record, r->address_record)) { avahi_record_unref(r->address_record); r->address_record = NULL;