-
-#define AVAHI_RR_HOLDOFF_MSEC 1000
-#define AVAHI_RR_HOLDOFF_MSEC_RATE_LIMIT 60000
-#define AVAHI_RR_RATE_LIMIT_COUNT 15
-
-static void free_entry(AvahiServer*s, AvahiEntry *e) {
- AvahiEntry *t;
-
- assert(s);
- assert(e);
-
- avahi_goodbye_entry(s, e, 1);
-
- /* Remove from linked list */
- AVAHI_LLIST_REMOVE(AvahiEntry, entries, s->entries, e);
-
- /* Remove from hash table indexed by name */
- t = avahi_hashmap_lookup(s->entries_by_key, e->record->key);
- AVAHI_LLIST_REMOVE(AvahiEntry, by_key, t, e);
- if (t)
- avahi_hashmap_replace(s->entries_by_key, t->record->key, t);
- else
- avahi_hashmap_remove(s->entries_by_key, e->record->key);
-
- /* Remove from associated group */
- if (e->group)
- AVAHI_LLIST_REMOVE(AvahiEntry, by_group, e->group->entries, e);
-
- avahi_record_unref(e->record);
- avahi_free(e);
-}
-
-static void free_group(AvahiServer *s, AvahiSEntryGroup *g) {
- assert(s);
- assert(g);
-
- while (g->entries)
- free_entry(s, g->entries);
-
- if (g->register_time_event)
- avahi_time_event_free(g->register_time_event);
-
- AVAHI_LLIST_REMOVE(AvahiSEntryGroup, groups, s->groups, g);
- avahi_free(g);
-}
-
-static void cleanup_dead(AvahiServer *s) {
- assert(s);
-
- if (s->need_group_cleanup) {
- AvahiSEntryGroup *g, *next;
-
- for (g = s->groups; g; g = next) {
- next = g->groups_next;
-
- if (g->dead)
- free_group(s, g);
- }
-
- s->need_group_cleanup = 0;
- }
-
- if (s->need_entry_cleanup) {
- AvahiEntry *e, *next;
-
- for (e = s->entries; e; e = next) {
- next = e->entries_next;
-
- if (e->dead)
- free_entry(s, e);
- }
-
- s->need_entry_cleanup = 0;
- }
-
- if (s->need_browser_cleanup)
- avahi_browser_cleanup(s);
-}