]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4335. [bug] zone->view could be detached too early. [RT #41942]
authorMark Andrews <marka@isc.org>
Mon, 21 Mar 2016 01:02:00 +0000 (12:02 +1100)
committerMark Andrews <marka@isc.org>
Mon, 21 Mar 2016 01:02:00 +0000 (12:02 +1100)
CHANGES
bin/named/statschannel.c
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index c67130ed3d267342b10913db84290ede00d44e07..96d261a45066a23e79ed556612a4628556e21d68 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+4335.  [bug]           zone->view could be detached too early. [RT #41942]
+
 4334.  [func]          'named -V' now reports zlib version. [RT #41913]
 
 4333.  [maint]         L.ROOT-SERVERS.NET is now 199.7.83.42 and
index 8353eef47b9f4db5c8e902ec10755c79a75698bf..651f65ffb0189e5da65f87f082968ec6672ea656 100644 (file)
@@ -3238,10 +3238,12 @@ ns_stats_dump(ns_server_t *server, FILE *fp) {
                if (zonestats != NULL) {
                        char zonename[DNS_NAME_FORMATSIZE];
 
-                       dns_name_format(dns_zone_getorigin(zone),
-                                       zonename, sizeof(zonename));
                        view = dns_zone_getview(zone);
+                       if (view == NULL)
+                               continue;
 
+                       dns_name_format(dns_zone_getorigin(zone),
+                                       zonename, sizeof(zonename));
                        fprintf(fp, "[%s", zonename);
                        if (strcmp(view->name, "_default") != 0)
                                fprintf(fp, " (view: %s)", view->name);
index 34610402e51f8497acbe0b439cbfd04a8b954dc6..6878ffe4b46ee7e773ea511c23d259fcbe4e3fd9 100644 (file)
@@ -1111,6 +1111,8 @@ zone_free(dns_zone_t *zone) {
                isc_task_detach(&zone->task);
        if (zone->loadtask != NULL)
                isc_task_detach(&zone->loadtask);
+       if (zone->view != NULL)
+               dns_view_weakdetach(&zone->view);
 
        /* Unmanaged objects */
        for (signing = ISC_LIST_HEAD(zone->signing);
@@ -12286,9 +12288,6 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
                zone->irefs--;
        }
 
-       if (zone->view != NULL)
-               dns_view_weakdetach(&zone->view);
-
        /*
         * We have now canceled everything set the flag to allow exit_check()
         * to succeed.  We must not unlock between setting this flag and