diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index 4f64c13a13..03e35f2cd4 100644 --- a/bin/named/include/named/globals.h +++ b/bin/named/include/named/globals.h @@ -53,6 +53,7 @@ EXTERN unsigned int named_g_cpus INIT(0); EXTERN unsigned int named_g_udpdisp INIT(0); EXTERN isc_loop_t *named_g_mainloop INIT(NULL); EXTERN isc_loopmgr_t *named_g_loopmgr INIT(NULL); +EXTERN bool named_g_loopmgr_running INIT(false); EXTERN dns_dispatchmgr_t *named_g_dispatchmgr INIT(NULL); EXTERN unsigned int named_g_cpus_detected INIT(1); diff --git a/bin/named/main.c b/bin/named/main.c index 6d73b338bc..5372b902fd 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -1506,6 +1506,10 @@ main(int argc, char *argv[]) { */ isc_signal_start(named_g_server->sighup); + /* + * Pause the loop manager in fatal. + */ + named_g_loopmgr_running = true; isc_loopmgr_run(named_g_loopmgr); #ifdef HAVE_LIBSCF diff --git a/bin/named/server.c b/bin/named/server.c index 8e3ba56205..a13c9c7a4d 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -10286,7 +10286,9 @@ named_server_destroy(named_server_t **serverp) { static void fatal(const char *msg, isc_result_t result) { - isc_loopmgr_pause(named_g_loopmgr); + if (named_g_loopmgr_running) { + isc_loopmgr_pause(named_g_loopmgr); + } isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER, ISC_LOG_CRITICAL, "%s: %s", msg, isc_result_totext(result));