From: Lennart Poettering Date: Fri, 18 Dec 2015 18:19:56 +0000 (+0100) Subject: resolved: optimize dns_cache_remove() a bit X-Git-Tag: v229~201^2~13 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1f97052fe0e90781b6e4caac0ecd104bd2bf54e6;p=thirdparty%2Fsystemd.git resolved: optimize dns_cache_remove() a bit --- diff --git a/src/resolve/resolved-dns-cache.c b/src/resolve/resolved-dns-cache.c index 65eff7fda6d..2e3090b32ab 100644 --- a/src/resolve/resolved-dns-cache.c +++ b/src/resolve/resolved-dns-cache.c @@ -101,18 +101,21 @@ void dns_cache_flush(DnsCache *c) { } static bool dns_cache_remove(DnsCache *c, DnsResourceKey *key) { - DnsCacheItem *i; - bool exist = false; + DnsCacheItem *first, *i, *n; assert(c); assert(key); - while ((i = hashmap_get(c->by_key, key))) { - dns_cache_item_remove_and_free(c, i); - exist = true; + first = hashmap_remove(c->by_key, key); + if (!first) + return false; + + LIST_FOREACH_SAFE(by_key, i, n, first) { + prioq_remove(c->by_expiry, i, &i->prioq_idx); + dns_cache_item_free(i); } - return exist; + return true; } static void dns_cache_make_space(DnsCache *c, unsigned add) {