summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2009-04-22 11:04:03 +0200
committerMartin Nagy <mnagy@redhat.com>2009-04-22 14:01:09 +0200
commit1c5e11063e71024f08c087ebc8bbddf7044b831e (patch)
tree6406dd6a9ff557008eeb035e77b0fafe21294643
parent1ae7a3c4d2f018b251838ffdbd926c758cc2329c (diff)
downloadbind_dynamic-1c5e11063e71024f08c087ebc8bbddf7044b831e.tar.gz
bind_dynamic-1c5e11063e71024f08c087ebc8bbddf7044b831e.tar.xz
bind_dynamic-1c5e11063e71024f08c087ebc8bbddf7044b831e.zip
Unload all back-ends before reloading.
-rw-r--r--bin/named/main.c2
-rw-r--r--bin/named/server.c3
-rw-r--r--lib/dns/dynamic_db.c5
-rw-r--r--lib/dns/include/dns/dynamic_db.h2
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);