diff --git a/evdns.c b/evdns.c index 66a3bff3..04362a32 100644 --- a/evdns.c +++ b/evdns.c @@ -4044,6 +4044,19 @@ evdns_base_free(struct evdns_base *base, int fail_requests) evdns_base_free_and_unlock(base, fail_requests); } +void +evdns_base_flush_outdated_host_addresses(struct evdns_base *base) +{ + EVDNS_LOCK(base); + struct hosts_entry *victim; + while ((victim = TAILQ_FIRST(&base->hostsdb))) { + TAILQ_REMOVE(&base->hostsdb, victim, next); + mm_free(victim); + } + EVDNS_UNLOCK(base); + EVTHREAD_FREE_LOCK(base->lock, EVTHREAD_LOCKTYPE_RECURSIVE); +} + void evdns_shutdown(int fail_requests) { diff --git a/include/event2/dns.h b/include/event2/dns.h index edd2a23e..b7ca0937 100644 --- a/include/event2/dns.h +++ b/include/event2/dns.h @@ -237,6 +237,12 @@ struct evdns_base * evdns_base_new(struct event_base *event_base, int initialize */ void evdns_base_free(struct evdns_base *base, int fail_requests); +/** + All previous outdated host addresses will be removed or flushed from the event base. + @param evdns_base the evdns base to flush outdated host addresses +*/ +void evdns_base_flush_outdated_host_addresses(struct evdns_base *base); + /** Convert a DNS error code to a string.