summaryrefslogtreecommitdiffstats
path: root/crypto/engine/eng_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/engine/eng_init.c')
-rw-r--r--crypto/engine/eng_init.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/crypto/engine/eng_init.c b/crypto/engine/eng_init.c
index c51a38dac0..8be7c6fc86 100644
--- a/crypto/engine/eng_init.c
+++ b/crypto/engine/eng_init.c
@@ -80,7 +80,10 @@ int ENGINE_init(ENGINE *e)
ENGINEerr(ENGINE_F_ENGINE_INIT, ERR_R_PASSED_NULL_PARAMETER);
return 0;
}
- CRYPTO_THREAD_run_once(&engine_lock_init, do_engine_lock_init);
+ if (!RUN_ONCE(&engine_lock_init, do_engine_lock_init)) {
+ ENGINEerr(ENGINE_F_ENGINE_INIT, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
CRYPTO_THREAD_write_lock(global_engine_lock);
ret = engine_unlocked_init(e);
CRYPTO_THREAD_unlock(global_engine_lock);