diff --git a/lib/isc/include/isc/atomic.h b/lib/isc/include/isc/atomic.h index 34344e244b..420a947028 100644 --- a/lib/isc/include/isc/atomic.h +++ b/lib/isc/include/isc/atomic.h @@ -65,6 +65,8 @@ atomic_fetch_or_explicit((o), (v), memory_order_release) #define atomic_exchange_acq_rel(o, v) \ atomic_exchange_explicit((o), (v), memory_order_acq_rel) +#define atomic_fetch_sub_acq_rel(o, v) \ + atomic_fetch_sub_explicit((o), (v), memory_order_acq_rel) #define atomic_compare_exchange_weak_acq_rel(o, e, d) \ atomic_compare_exchange_weak_explicit( \ (o), (e), (d), memory_order_acq_rel, memory_order_acquire) diff --git a/lib/isc/include/isc/refcount.h b/lib/isc/include/isc/refcount.h index 74543d471f..6def63f8bd 100644 --- a/lib/isc/include/isc/refcount.h +++ b/lib/isc/include/isc/refcount.h @@ -118,7 +118,7 @@ isc_refcount_increment(isc_refcount_t *target) { static inline uint_fast32_t isc_refcount_decrement(isc_refcount_t *target) { uint_fast32_t __v; - __v = (uint_fast32_t)atomic_fetch_sub_release(target, 1); + __v = (uint_fast32_t)atomic_fetch_sub_acq_rel(target, 1); INSIST(__v > 0); return (__v); } @@ -127,7 +127,7 @@ isc_refcount_decrement(isc_refcount_t *target) { ({ \ /* cppcheck-suppress shadowVariable */ \ uint_fast32_t __v; \ - __v = atomic_fetch_sub_release(target, 1); \ + __v = atomic_fetch_sub_acq_rel(target, 1); \ INSIST(__v > 0); \ __v; \ })