From 1c5e11063e71024f08c087ebc8bbddf7044b831e Mon Sep 17 00:00:00 2001 From: Martin Nagy Date: Wed, 22 Apr 2009 11:04:03 +0200 Subject: Unload all back-ends before reloading. --- bin/named/main.c | 2 +- bin/named/server.c | 3 +++ lib/dns/dynamic_db.c | 5 +++-- lib/dns/include/dns/dynamic_db.h | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/named/main.c b/bin/named/main.c index 8030e3d..aed2a55 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -779,7 +779,7 @@ cleanup(void) { dlz_drivers_clear(); #endif - dns_dynamic_db_cleanup(); + dns_dynamic_db_cleanup(ISC_TRUE); dns_name_destroy(); diff --git a/bin/named/server.c b/bin/named/server.c index 5d4077d..7670f1a 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -3002,6 +3002,7 @@ load_configuration(const char *filename, ns_server_t *server, result = isc_task_beginexclusive(server->task); RUNTIME_CHECK(result == ISC_R_SUCCESS); + dns_dynamic_db_cleanup(ISC_FALSE); /* * Parse the global default pseudo-config file. */ @@ -4239,6 +4240,8 @@ loadconfig(ns_server_t *server) { static isc_result_t reload(ns_server_t *server) { isc_result_t result; + + dns_dynamic_db_cleanup(ISC_FALSE); CHECK(loadconfig(server)); result = load_zones(server, ISC_FALSE); diff --git a/lib/dns/dynamic_db.c b/lib/dns/dynamic_db.c index f11584d..5dc9644 100644 --- a/lib/dns/dynamic_db.c +++ b/lib/dns/dynamic_db.c @@ -226,7 +226,7 @@ cleanup: } void -dns_dynamic_db_cleanup(void) +dns_dynamic_db_cleanup(isc_boolean_t exiting) { dyndb_implementation_t *elem; dyndb_implementation_t *next; @@ -244,7 +244,8 @@ dns_dynamic_db_cleanup(void) } UNLOCK(&dyndb_lock); - isc_mutex_destroy(&dyndb_lock); + if (exiting == ISC_TRUE) + isc_mutex_destroy(&dyndb_lock); } dns_dyndb_arguments_t * diff --git a/lib/dns/include/dns/dynamic_db.h b/lib/dns/include/dns/dynamic_db.h index 12f7a06..7b1c1ce 100644 --- a/lib/dns/include/dns/dynamic_db.h +++ b/lib/dns/include/dns/dynamic_db.h @@ -32,7 +32,7 @@ isc_result_t dns_dynamic_db_load(const char *libname, const char *name, isc_mem_t *mctx, const char * const *argv, dns_dyndb_arguments_t *dyndb_args); -void dns_dynamic_db_cleanup(void); +void dns_dynamic_db_cleanup(isc_boolean_t exiting); dns_dyndb_arguments_t *dns_dyndb_arguments_create(isc_mem_t *mctx); void dns_dyndb_arguments_destroy(isc_mem_t *mctx, dns_dyndb_arguments_t *args); -- cgit