X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fresolve-service.c;h=6dbca40ee2726df25f5a78bc982973b383b6563a;hb=14e31e958eb9d280cfe544bc3379d19255badd21;hp=333f2578ff9b876e21e7cdf028612cf5739adee2;hpb=15aaf28f0345ed6998ef6eae921c7750c4ce26f9;p=catta diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c index 333f257..6dbca40 100644 --- a/avahi-core/resolve-service.c +++ b/avahi-core/resolve-service.c @@ -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;