From cbe8034dc8831cfd1169d74346883e3fd795d433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Mon, 20 May 2019 16:59:11 +0200 Subject: [PATCH] lib/isc/quota.c: use proper acquire/release/relaxed memory order semantics --- lib/isc/quota.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/isc/quota.c b/lib/isc/quota.c index 4ce36ddf82..2480fb8ad5 100644 --- a/lib/isc/quota.c +++ b/lib/isc/quota.c @@ -21,27 +21,27 @@ void isc_quota_init(isc_quota_t *quota, unsigned int max) { - atomic_store("a->max, max); - atomic_store("a->used, 0); - atomic_store("a->soft, 0); + atomic_init("a->max, max); + atomic_init("a->used, 0); + atomic_init("a->soft, 0); } void isc_quota_destroy(isc_quota_t *quota) { INSIST(atomic_load("a->used) == 0); - atomic_store("a->max, 0); - atomic_store("a->used, 0); - atomic_store("a->soft, 0); + atomic_store_release("a->max, 0); + atomic_store_release("a->used, 0); + atomic_store_release("a->soft, 0); } void isc_quota_soft(isc_quota_t *quota, unsigned int soft) { - atomic_store("a->soft, soft); + atomic_store_release("a->soft, soft); } void isc_quota_max(isc_quota_t *quota, unsigned int max) { - atomic_store("a->max, max); + atomic_store_release("a->max, max); } unsigned int @@ -62,9 +62,9 @@ isc_quota_getused(isc_quota_t *quota) { isc_result_t isc_quota_reserve(isc_quota_t *quota) { isc_result_t result; - uint32_t max = atomic_load("a->max); - uint32_t soft = atomic_load("a->soft); - uint32_t used = atomic_fetch_add("a->used, 1); + uint32_t max = atomic_load_acquire("a->max); + uint32_t soft = atomic_load_acquire("a->soft); + uint32_t used = atomic_fetch_add_relaxed("a->used, 1); if (max == 0 || used < max) { if (soft == 0 || used < soft) { result = ISC_R_SUCCESS; @@ -72,7 +72,7 @@ isc_quota_reserve(isc_quota_t *quota) { result = ISC_R_SOFTQUOTA; } } else { - INSIST(atomic_fetch_sub("a->used, 1) > 0); + INSIST(atomic_fetch_sub_release("a->used, 1) > 0); result = ISC_R_QUOTA; } return (result); @@ -80,7 +80,7 @@ isc_quota_reserve(isc_quota_t *quota) { void isc_quota_release(isc_quota_t *quota) { - INSIST(atomic_fetch_sub("a->used, 1) > 0); + INSIST(atomic_fetch_sub_release("a->used, 1) > 0); } static isc_result_t @@ -93,7 +93,7 @@ doattach(isc_quota_t *quota, isc_quota_t **p, bool force) { *p = quota; } else if (result == ISC_R_QUOTA && force) { /* attach anyway */ - atomic_fetch_add("a->used, 1); + atomic_fetch_add_relaxed("a->used, 1); *p = quota; result = ISC_R_SUCCESS; }