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.
atomic_load_acquire(&recvs) == 0)
{
shuttingdown = true;
- isc_task_shutdown(rndc_task);
isc_app_shutdown();
}
}
atomic_fetch_sub_release(&recvs, 1) == 1)
{
shuttingdown = true;
- isc_task_shutdown(rndc_task);
isc_app_shutdown();
}
}