]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
prevent a possible shutdown hang in rndc
authorEvan Hunt <each@isc.org>
Tue, 6 Sep 2022 21:13:23 +0000 (14:13 -0700)
committerEvan Hunt <each@isc.org>
Mon, 12 Sep 2022 20:34:58 +0000 (13:34 -0700)
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.)

(cherry picked from commit 9683439d7399e1e525853c42f7cc337b3081405e)

bin/rndc/rndc.c

index 619dca140b82a080fc428f3d47d2447b6733674d..b81ed3ed2632a4fb38128d638081217fa0c8268f 100644 (file)
@@ -388,8 +388,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_app_shutdown();