From 9683439d7399e1e525853c42f7cc337b3081405e Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 6 Sep 2022 14:13:23 -0700 Subject: [PATCH] prevent a possible shutdown hang in rndc In rndc_recvdone(), if 'sends' was not 0, then 'recvs' was not decremented, in which case isc_loopmgr_shutdown() was never reached, which could cause a hang. (This has not been observed to happen, but the code was incorrect on examination.) --- bin/rndc/rndc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/rndc/rndc.c b/bin/rndc/rndc.c index cabeb91e05..ff7b9e8e55 100644 --- a/bin/rndc/rndc.c +++ b/bin/rndc/rndc.c @@ -390,8 +390,8 @@ rndc_recvdone(isc_nmhandle_t *handle, isc_result_t result, void *arg) { REQUIRE(recvdone_handle == handle); isc_nmhandle_detach(&recvdone_handle); - if (atomic_load_acquire(&sends) == 0 && - atomic_fetch_sub_release(&recvs, 1) == 1) + if (atomic_fetch_sub_release(&recvs, 1) == 1 && + atomic_load_acquire(&sends) == 0) { shuttingdown = true; isc_task_detach(&rndc_task);