use native atomic increment function on Solaris
Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9215)
This commit is contained in:
parent
ac5a61caf8
commit
d6dda392c1
1 changed files with 10 additions and 0 deletions
|
@ -10,6 +10,10 @@
|
|||
#include <openssl/crypto.h>
|
||||
#include "internal/cryptlib.h"
|
||||
|
||||
#if defined(__sun)
|
||||
# include <atomic.h>
|
||||
#endif
|
||||
|
||||
#if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && !defined(OPENSSL_SYS_WINDOWS)
|
||||
|
||||
# ifdef PTHREAD_RWLOCK_INITIALIZER
|
||||
|
@ -162,6 +166,12 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
|
|||
*ret = __atomic_add_fetch(val, amount, __ATOMIC_ACQ_REL);
|
||||
return 1;
|
||||
}
|
||||
# elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
|
||||
/* This will work for all future Solaris versions. */
|
||||
if (ret != NULL) {
|
||||
*ret = atomic_add_int_nv((volatile unsigned int *)val, amount);
|
||||
return 1;
|
||||
}
|
||||
# endif
|
||||
if (!CRYPTO_THREAD_write_lock(lock))
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue