Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9215)
#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
*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;