]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
preserve cache when reload fails
authorColin Vidal <colin@isc.org>
Tue, 16 Sep 2025 15:14:33 +0000 (17:14 +0200)
committerColin Vidal <colin@isc.org>
Wed, 17 Sep 2025 14:45:51 +0000 (16:45 +0200)
If the server is reloaded, new views are created and preexisting cache
is attached to those _but_ something goes wrong later, the previous
views are restored but the previous cache list is destroyed. This makes
the subsequent reload to drop the existing cache. This fixes it by
avoiding a mutation of the old cache list.

bin/named/server.c

index 3ae0d826ed286ed1ce2be81c07d2923bf915452b..ca39a4be5aa224a812db89b5e5c0f376c3015faa 100644 (file)
@@ -4414,13 +4414,15 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
                                      dns_cache_getname(nsc->cache));
                        nsc = NULL;
                } else {
+                       shared_cache = true;
+                       dns_cache_attach(nsc->cache, &cache);
                        if (oldcache) {
-                               ISC_LIST_UNLINK(*oldcachelist, nsc, link);
-                               ISC_LIST_APPEND(*cachelist, nsc, link);
-                               nsc->primaryview = view;
+                               /*
+                                * We need to re-use the cache, but we don't
+                                * want to mutate the old production list.
+                                */
+                               nsc = NULL;
                        }
-                       dns_cache_attach(nsc->cache, &cache);
-                       shared_cache = true;
                }
        } else if (strcmp(cachename, view->name) == 0) {
                result = dns_viewlist_find(&named_g_server->viewlist, cachename,