projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove heartbeat support
[openssl.git]
/
crypto
/
threads_pthread.c
diff --git
a/crypto/threads_pthread.c
b/crypto/threads_pthread.c
index 6f5e812d97ac4bebdbda904650c64b5254df03e7..5cc48afb16f2f484b066da12a0398353d7cbba0e 100644
(file)
--- a/
crypto/threads_pthread.c
+++ b/
crypto/threads_pthread.c
@@
-109,9
+109,12
@@
int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b)
int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
{
int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
{
-#ifdef __ATOMIC_RELAXED
- *ret = __atomic_add_fetch(val, amount, __ATOMIC_RELAXED);
-#else
+# if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL)
+ if (__atomic_is_lock_free(sizeof(*val), val)) {
+ *ret = __atomic_add_fetch(val, amount, __ATOMIC_ACQ_REL);
+ return 1;
+ }
+# endif
if (!CRYPTO_THREAD_write_lock(lock))
return 0;
if (!CRYPTO_THREAD_write_lock(lock))
return 0;
@@
-120,7
+123,6
@@
int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
if (!CRYPTO_THREAD_unlock(lock))
return 0;
if (!CRYPTO_THREAD_unlock(lock))
return 0;
-#endif
return 1;
}
return 1;
}