diff options
author | Matt Caswell <matt@openssl.org> | 2016-03-07 14:39:22 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-03-07 17:17:21 +0000 |
commit | c292b105b1d0a627091480d3e4f6122b22a46385 (patch) | |
tree | 0670059ef83754e4d1c051bf54e86e45571cf294 /crypto | |
parent | a072ed0c882caa5c0b1742262ef7f4aa1e0e04a5 (diff) | |
download | openssl-c292b105b1d0a627091480d3e4f6122b22a46385.tar.gz |
Remove use of CRYPTO_LOCK_INIT in init code
Swap the use of CRYPTO_LOCK_INIT in the init code to use the new threading
API mechanism for locking.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/init.c | 9 | ||||
-rw-r--r-- | crypto/lock.c | 3 |
2 files changed, 8 insertions, 4 deletions
diff --git a/crypto/init.c b/crypto/init.c index 491ef831cb..44acd4f4df 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -105,6 +105,7 @@ struct ossl_init_stop_st { }; static OPENSSL_INIT_STOP *stop_handlers = NULL; +static CRYPTO_RWLOCK *init_lock = NULL; static CRYPTO_ONCE base = CRYPTO_ONCE_STATIC_INIT; static int base_inited = 0; @@ -121,6 +122,7 @@ static void ossl_init_base(void) #ifndef OPENSSL_SYS_UEFI atexit(OPENSSL_cleanup); #endif + init_lock = CRYPTO_THREAD_lock_new(); OPENSSL_cpuid_setup(); base_inited = 1; } @@ -425,6 +427,9 @@ void OPENSSL_cleanup(void) OPENSSL_free(lasthandler); } stop_handlers = NULL; + + CRYPTO_THREAD_lock_free(init_lock); + /* * We assume we are single-threaded for this function, i.e. no race * conditions for the various "*_inited" vars below. @@ -544,10 +549,10 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) if (opts & OPENSSL_INIT_LOAD_CONFIG) { int ret; - CRYPTO_w_lock(CRYPTO_LOCK_INIT); + CRYPTO_THREAD_write_lock(init_lock); config_filename = (settings == NULL) ? NULL : settings->config_name; ret = CRYPTO_THREAD_run_once(&config, ossl_init_config); - CRYPTO_w_unlock(CRYPTO_LOCK_INIT); + CRYPTO_THREAD_unlock(init_lock); if (!ret) return 0; } diff --git a/crypto/lock.c b/crypto/lock.c index aa34202163..35f0059ef3 100644 --- a/crypto/lock.c +++ b/crypto/lock.c @@ -163,8 +163,7 @@ static const char *const lock_names[CRYPTO_NUM_LOCKS] = { "comp", "fips", "fips2", - "init", -#if CRYPTO_NUM_LOCKS != 42 +#if CRYPTO_NUM_LOCKS != 41 # error "Inconsistency between crypto.h and cryptlib.c" #endif }; |