diff options
Diffstat (limited to 'crypto/engine/eng_init.c')
-rw-r--r-- | crypto/engine/eng_init.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/crypto/engine/eng_init.c b/crypto/engine/eng_init.c index ddf552a537..f3c0de99f9 100644 --- a/crypto/engine/eng_init.c +++ b/crypto/engine/eng_init.c @@ -101,10 +101,10 @@ int engine_unlocked_finish(ENGINE *e, int unlock_for_handlers) engine_ref_debug(e, 1, -1); if ((e->funct_ref == 0) && e->finish) { if (unlock_for_handlers) - CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + CRYPTO_THREAD_unlock(global_engine_lock); to_return = e->finish(e); if (unlock_for_handlers) - CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + CRYPTO_THREAD_write_lock(global_engine_lock); if (!to_return) return 0; } @@ -125,9 +125,10 @@ int ENGINE_init(ENGINE *e) ENGINEerr(ENGINE_F_ENGINE_INIT, ERR_R_PASSED_NULL_PARAMETER); return 0; } - CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + CRYPTO_THREAD_run_once(&engine_lock_init, do_engine_lock_init); + CRYPTO_THREAD_write_lock(global_engine_lock); ret = engine_unlocked_init(e); - CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + CRYPTO_THREAD_unlock(global_engine_lock); return ret; } @@ -138,9 +139,9 @@ int ENGINE_finish(ENGINE *e) if (e == NULL) return 1; - CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + CRYPTO_THREAD_write_lock(global_engine_lock); to_return = engine_unlocked_finish(e, 1); - CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + CRYPTO_THREAD_unlock(global_engine_lock); if (!to_return) { ENGINEerr(ENGINE_F_ENGINE_FINISH, ENGINE_R_FINISH_FAILED); return 0; |