forked from ports/compat-32
52 lines
2.4 KiB
Diff
52 lines
2.4 KiB
Diff
Submitted By: Douglas R. Reno <renodr at linuxfromscratch dot org>
|
|
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.");
|