Submitted By: Douglas R. Reno Date: 2020-10-19 Initial Package Version: 0.8 Upstream Status: PR, not applied Origin: Upstream PR (github.com/lathiat/avahi/pull/309) Description: Fixes a race condition when multiple NICs are in use when IPv6 is enabled. This will exhibit behavior where messages about withdrawing address records, registering access records, and new hostname announcements are spammed to the log every second. diff -Naurp avahi-0.8.orig/avahi-core/server.c avahi-0.8/avahi-core/server.c --- avahi-0.8.orig/avahi-core/server.c 2020-02-16 21:41:24.939967558 -0600 +++ avahi-0.8/avahi-core/server.c 2020-10-19 11:07:22.054861721 -0500 @@ -193,7 +193,7 @@ static void withdraw_rrset(AvahiServer * withdraw_entry(s, e); } -static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i) { +static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i, int from_local_iface) { AvahiEntry *e, *n; int ours = 0, won = 0, lost = 0; @@ -210,7 +210,7 @@ static void incoming_probe(AvahiServer * if (e->dead) continue; - if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0) { + if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0 || from_local_iface) { ours = 1; break; } else { @@ -639,7 +639,7 @@ static void handle_query_packet(AvahiSer if (!avahi_key_is_pattern(record->key)) { if (!from_local_iface) reflect_probe(s, i, record); - incoming_probe(s, record, i); + incoming_probe(s, record, i, from_local_iface); } avahi_record_unref(record); @@ -961,8 +961,7 @@ static void dispatch_packet(AvahiServer return; /* We don't want to reflect local traffic, so we check if this packet is generated locally. */ - if (s->config.enable_reflector) - from_local_iface = originates_from_local_iface(s, iface, src_address, port); + from_local_iface = originates_from_local_iface(s, iface, src_address, port); if (avahi_dns_packet_check_valid_multicast(p) < 0) { avahi_log_debug("Received invalid packet.");