summaryrefslogtreecommitdiff
path: root/bin/named/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/named/main.c')
-rw-r--r--bin/named/main.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/bin/named/main.c b/bin/named/main.c
index a5467249..45aa1af3 100644
--- a/bin/named/main.c
+++ b/bin/named/main.c
@@ -643,14 +643,6 @@ create_managers(void) {
ISC_LOG_INFO, "using up to %u sockets", socks);
}
- result = isc_entropy_create(ns_g_mctx, &ns_g_entropy);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_entropy_create() failed: %s",
- isc_result_totext(result));
- return (ISC_R_UNEXPECTED);
- }
-
result = isc_hash_create(ns_g_mctx, ns_g_entropy, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
@@ -666,10 +658,6 @@ static void
destroy_managers(void) {
ns_lwresd_shutdown();
- isc_entropy_detach(&ns_g_entropy);
- if (ns_g_fallbackentropy != NULL)
- isc_entropy_detach(&ns_g_fallbackentropy);
-
/*
* isc_taskmgr_destroy() will block until all tasks have exited,
*/
@@ -770,6 +758,21 @@ setup(void) {
}
#endif
+ result = isc_entropy_create(ns_g_mctx, &ns_g_entropy);
+ if (result != ISC_R_SUCCESS)
+ ns_main_earlyfatal("isc_entropy_create() failed: %s",
+ isc_result_totext(result));
+
+ /*
+ * DST may load additional libraries, which must be done before
+ * chroot
+ */
+ result = dst_lib_init2(ns_g_mctx, ns_g_entropy,
+ ns_g_engine, ISC_ENTROPY_GOODONLY);
+ if (result != ISC_R_SUCCESS)
+ ns_main_earlyfatal("dst_lib_init2() failed: %s",
+ isc_result_totext(result));
+
#ifdef ISC_PLATFORM_USETHREADS
/*
* Check for the number of cpu's before ns_os_chroot().
@@ -936,6 +939,12 @@ cleanup(void) {
ns_builtin_deinit();
+ dst_lib_destroy();
+
+ isc_entropy_detach(&ns_g_entropy);
+ if (ns_g_fallbackentropy != NULL)
+ isc_entropy_detach(&ns_g_fallbackentropy);
+
/*
* Add calls to unregister sdb drivers here.
*/