Fix code freeing cached non-A(AAA) records too early
[project/mdnsd.git] / cache.c
diff --git a/cache.c b/cache.c
index 921e6124631ded851547f9db781df0e82f0ad71a..0658e7e2f44c127b167db8f76bb87bff2e9686de 100644 (file)
--- a/cache.c
+++ b/cache.c
@@ -78,9 +78,10 @@ cache_gc_timer(struct uloop_timeout *timeout)
        avl_for_each_element_safe(&records, r, avl, p) {
                if (!cache_is_expired(r->time, r->ttl, r->refresh))
                        continue;
-               /* Records other and A(AAA) are handled as services */
+               /* Records other than A(AAA) are handled as services */
                if (r->type != TYPE_A && r->type != TYPE_AAAA) {
-                       cache_record_free(r);
+                       if (cache_is_expired(r->time, r->ttl, 100))
+                               cache_record_free(r);
                        continue;
                }
                if (r->refresh >= 100) {