From d78f83f7b671523f45a2cfcf03f8e714c8908008 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 10 Oct 2005 22:59:08 +0000 Subject: don't send goodbye packets for records that are referenced from two local entries git-svn-id: file:///home/lennart/svn/public/avahi/trunk@712 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-core/announce.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'avahi-core/announce.c') diff --git a/avahi-core/announce.c b/avahi-core/announce.c index 025331d..33d52aa 100644 --- a/avahi-core/announce.c +++ b/avahi-core/announce.c @@ -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 */ -- cgit