]> git.meshlink.io Git - catta/blobdiff - avahi-core/announce.c
don't send goodbye packets for records that are referenced from two local entries
[catta] / avahi-core / announce.c
index 025331d0b43249eb054b26112a8d95c623f69728..33d52aa2cd773dd21c74ace10015662c9fc7e2d7 100644 (file)
@@ -391,6 +391,26 @@ static AvahiRecord *make_goodbye_record(AvahiRecord *r) {
     return g;
 }
 
+static int is_duplicate_entry(AvahiServer *s, AvahiEntry *e) {
+    AvahiEntry *i;
+    
+    assert(s);
+    assert(e);
+
+    for (i = avahi_hashmap_lookup(s->entries_by_key, e->record->key); i; i = i->by_key_next) {
+
+        if (i == e)
+            continue;
+
+        if (!avahi_record_equal_no_ttl(i->record, e->record))
+            continue;
+        
+        return 1;
+    }
+
+    return 0;
+}
+
 static void send_goodbye_callback(AvahiInterfaceMonitor *m, AvahiInterface *i, void* userdata) {
     AvahiEntry *e = userdata;
     AvahiRecord *g;
@@ -408,6 +428,9 @@ static void send_goodbye_callback(AvahiInterfaceMonitor *m, AvahiInterface *i, v
 
     if (!avahi_entry_is_registered(m->server, e, i))
         return;
+
+    if (is_duplicate_entry(m->server, e))
+        return;
     
     if (!(g = make_goodbye_record(e->record)))
         return; /* OOM */