]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Properly use atomic_compare_exchange instead of load/store
authorOndřej Surý <ondrej@sury.org>
Tue, 29 Jan 2019 15:19:50 +0000 (16:19 +0100)
committerOndřej Surý <ondrej@sury.org>
Wed, 30 Jan 2019 12:48:58 +0000 (13:48 +0100)
lib/isc/task.c

index 2edbec223c1e3c830ed275b1dd46a8b208635abb..96b24e737439988d319eea345fa18016acaced01 100644 (file)
@@ -1400,6 +1400,7 @@ isc_taskmgr_destroy(isc_taskmgr_t **managerp) {
        isc__taskmgr_t *manager;
        isc__task_t *task;
        unsigned int i;
+       bool exiting;
 
        /*
         * Destroy '*managerp'.
@@ -1440,8 +1441,10 @@ isc_taskmgr_destroy(isc_taskmgr_t **managerp) {
        /*
         * Make sure we only get called once.
         */
-       INSIST(!atomic_load(&manager->exiting));
-       atomic_store(&manager->exiting, true);
+       exiting = false;
+
+       INSIST(!!atomic_compare_exchange_strong(&manager->exiting,
+                                               &exiting, true));
 
        /*
         * If privileged mode was on, turn it off.