From: Mark Andrews Date: Mon, 21 Mar 2016 01:02:00 +0000 (+1100) Subject: 4335. [bug] zone->view could be detached too early. [RT #41942] X-Git-Tag: v9.11.0a1~23 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=b8dcc13bc5d49aa18a80179851cf0d7a81c54887;p=thirdparty%2Fbind9.git 4335. [bug] zone->view could be detached too early. [RT #41942] --- diff --git a/CHANGES b/CHANGES index c67130ed3d2..96d261a4506 100644 --- 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 diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index 8353eef47b9..651f65ffb01 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -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); diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 34610402e51..6878ffe4b46 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -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