From a4c3e6f3dd992bc78af02f2062e7c5bdc48ec39e Mon Sep 17 00:00:00 2001 From: Colin Vidal Date: Tue, 16 Sep 2025 17:14:33 +0200 Subject: [PATCH] preserve cache when reload fails 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. (cherry picked from commit a1703fa35b1ad3e2be1ff961122b5fdc39654b5e) --- bin/named/server.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bin/named/server.c b/bin/named/server.c index 5168c47ca0..6145e9181e 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -4839,13 +4839,15 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config, dns_cache_getname(nsc->cache)); nsc = NULL; } else { - if (oldcache) { - ISC_LIST_UNLINK(*oldcachelist, nsc, link); - ISC_LIST_APPEND(*cachelist, nsc, link); - nsc->primaryview = view; - } - dns_cache_attach(nsc->cache, &cache); shared_cache = true; + dns_cache_attach(nsc->cache, &cache); + if (oldcache) { + /* + * We need to re-use the cache, but we don't + * want to mutate the old production list. + */ + nsc = NULL; + } } } else if (strcmp(cachename, view->name) == 0) { result = dns_viewlist_find(&named_g_server->viewlist, cachename,