From: Ondřej Surý Date: Tue, 29 Jan 2019 15:19:50 +0000 (+0100) Subject: Properly use atomic_compare_exchange instead of load/store X-Git-Tag: v9.13.6~23^2~4 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=d3e06043541c3ffd725f546f6e8314e3e303c845;p=thirdparty%2Fbind9.git Properly use atomic_compare_exchange instead of load/store --- diff --git a/lib/isc/task.c b/lib/isc/task.c index 2edbec223c1..96b24e73743 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -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.