From: Mark Andrews Date: Tue, 11 Apr 2023 05:32:51 +0000 (+1000) Subject: isc_loopmgr_pause was called inappropriately X-Git-Tag: v9.19.13~29^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=be68dd62eacfb9b10fd146a62f716cbdef9be883;p=thirdparty%2Fbind9.git isc_loopmgr_pause was called inappropriately isc_loopmgr_pause can't be called before isc_loopmgr_run is called as the thread ids are not yet valid. If there is a fatal error before isc_loopmgr_run is run then don't call isc_loopmgr_pause. --- diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index 4f64c13a133..03e35f2cd4b 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 6d73b338bc4..5372b902fd3 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 8e3ba56205d..a13c9c7a4d4 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));