From d1d721aae1ba9bef8752b2d55bdc95b603096447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Wed, 19 Jan 2022 14:30:17 +0100 Subject: [PATCH] rndc: prevent crashing after receiving a signal If isc_app_run() gets interrupted by a signal, the global 'rndc_task' variable may already be detached from (set to NULL) by the time the outstanding netmgr callbacks are run. This triggers an assertion failure in isc_task_shutdown(). However, explicitly calling isc_task_shutdown() from rndc code is redundant because it does not use isc_task_onshutdown() and the task_shutdown() function gets automatically called anyway when the task manager gets destroyed (after isc_app_run() returns). Remove the redundant isc_task_shutdown() calls to prevent crashes after receiving a signal. --- bin/rndc/rndc.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/bin/rndc/rndc.c b/bin/rndc/rndc.c index c6e3212f68..f25db5a80a 100644 --- a/bin/rndc/rndc.c +++ b/bin/rndc/rndc.c @@ -307,7 +307,6 @@ rndc_senddone(isc_nmhandle_t *handle, isc_result_t result, void *arg) { atomic_load_acquire(&recvs) == 0) { shuttingdown = true; - isc_task_shutdown(rndc_task); isc_app_shutdown(); } } @@ -393,7 +392,6 @@ rndc_recvdone(isc_nmhandle_t *handle, isc_result_t result, void *arg) { atomic_fetch_sub_release(&recvs, 1) == 1) { shuttingdown = true; - isc_task_shutdown(rndc_task); isc_app_shutdown(); } }