From: Richard Levitte Date: Sat, 27 May 2017 20:04:59 +0000 (+0200) Subject: Add internal functions to fetch a refcount X-Git-Tag: OpenSSL_1_1_1-pre1~1434 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=6891a79da67ccd621b67e49b60ddc188d7864291 Add internal functions to fetch a refcount Reviewed-by: Tim Hudson (Merged from https://github.com/openssl/openssl/pull/3573) --- diff --git a/include/internal/refcount.h b/include/internal/refcount.h index 591561ffee..1aea71b2e8 100644 --- a/include/internal/refcount.h +++ b/include/internal/refcount.h @@ -22,6 +22,12 @@ typedef _Atomic int CRYPTO_REF_COUNT; +static ossl_inline int CRYPTO_GET_REF(_Atomic int *val, int *ret, void *lock) +{ + *ret = atomic_fetch_add_explicit(val, 0, memory_order_relaxed); + return 1; +} + static ossl_inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) { *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; @@ -42,6 +48,12 @@ static ossl_inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) typedef int CRYPTO_REF_COUNT; +static ossl_inline int CRYPTO_GET_REF(_Atomic int *val, int *ret, void *lock) +{ + *ret = __atomic_fetch_add(val, 0, __ATOMIC_RELAXED); + return 1; +} + static ossl_inline int CRYPTO_UP_REF(int *val, int *ret, void *lock) { *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; @@ -60,6 +72,7 @@ static ossl_inline int CRYPTO_DOWN_REF(int *val, int *ret, void *lock) typedef int CRYPTO_REF_COUNT; +# define CRYPTO_GET_REF(val, ret, lock) CRYPTO_atomic_add(val, 0, ret, lock) # define CRYPTO_UP_REF(val, ret, lock) CRYPTO_atomic_add(val, 1, ret, lock) # define CRYPTO_DOWN_REF(val, ret, lock) CRYPTO_atomic_add(val, -1, ret, lock)