summaryrefslogtreecommitdiffstats
path: root/crypto/init.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2016-03-07 14:39:22 +0000
committerMatt Caswell <matt@openssl.org>2016-03-07 17:17:21 +0000
commitc292b105b1d0a627091480d3e4f6122b22a46385 (patch)
tree0670059ef83754e4d1c051bf54e86e45571cf294 /crypto/init.c
parenta072ed0c882caa5c0b1742262ef7f4aa1e0e04a5 (diff)
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/init.c')
-rw-r--r--crypto/init.c9
1 files changed, 7 insertions, 2 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;
}