atomic-add.patch 965 B

1234567891011121314151617181920212223242526272829
  1. --- a/crypto/threads_pthread.c
  2. +++ b/crypto/threads_pthread.c
  3. @@ -158,11 +158,14 @@ int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b)
  4. int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
  5. {
  6. # if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL)
  7. - if (__atomic_is_lock_free(sizeof(*val), val)) {
  8. - *ret = __atomic_add_fetch(val, amount, __ATOMIC_ACQ_REL);
  9. - return 1;
  10. - }
  11. + _Static_assert(__atomic_is_lock_free(sizeof(*val), val), "'int' should be a lock free atomic type");
  12. + *ret = __atomic_add_fetch(val, amount, __ATOMIC_ACQ_REL);
  13. + return 1;
  14. +# else
  15. +# error "Should not be here. Do not need locks to work with an 'int' value atomically."
  16. # endif
  17. +
  18. +#if 0
  19. if (!CRYPTO_THREAD_write_lock(lock))
  20. return 0;
  21. @@ -173,6 +176,7 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
  22. return 0;
  23. return 1;
  24. +#endif
  25. }
  26. # ifdef OPENSSL_SYS_UNIX