[openssl-commits] [openssl] master update

Matt Caswell matt at openssl.org
Wed Aug 24 13:40:05 UTC 2016


The branch master has been updated
       via  1beca67688189f6542c7d08233c28e8fab73dba7 (commit)
       via  11fc6c761165283f5aed9aed5edd65c1bb963e79 (commit)
       via  cb4b54c23b95e4638d643eb349d8d8dfa1cc2fd3 (commit)
      from  63db6b772fa264a62927f6a3584733192dc5a352 (commit)


- Log -----------------------------------------------------------------
commit 1beca67688189f6542c7d08233c28e8fab73dba7
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Aug 24 09:14:44 2016 +0200

    CRYPTO_atomic_add(): check that the object is lock free
    
    If not, fall back to our own code, using the given mutex
    
    Reviewed-by: Andy Polyakov <appro at openssl.org>

commit 11fc6c761165283f5aed9aed5edd65c1bb963e79
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Aug 24 12:01:39 2016 +0200

    CRYPTO_atomic_add(): use acquire release memory order rather than relaxed
    
    For increments, the relaxed model is fine.  For decrements, it's
    recommended to use the acquire release model.  We therefore go for the
    latter.
    
    Reviewed-by: Andy Polyakov <appro at openssl.org>

commit cb4b54c23b95e4638d643eb349d8d8dfa1cc2fd3
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Aug 24 13:03:20 2016 +0200

    Check for __GNUC__ to use GNU C atomic buildins
    
    Note: we trust any other compiler that fully implements GNU extension
    to define __GNUC__
    
    RT#4642
    
    Reviewed-by: Andy Polyakov <appro at openssl.org>

-----------------------------------------------------------------------

Summary of changes:
 crypto/threads_pthread.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/crypto/threads_pthread.c b/crypto/threads_pthread.c
index 6f5e812..5cc48af 100644
--- 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)
 {
-#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;
 
@@ -120,7 +123,6 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
 
     if (!CRYPTO_THREAD_unlock(lock))
         return 0;
-#endif
 
     return 1;
 }


More information about the openssl-commits mailing list