diff --git a/crypto/context.c b/crypto/context.c index 3d55084d7bd80a..f64b9b6ab533f6 100644 --- a/crypto/context.c +++ b/crypto/context.c @@ -374,6 +374,9 @@ static int default_context_inited = 0; DEFINE_RUN_ONCE_STATIC(default_context_do_init) { + if (!ossl_init_thread()) + goto err; + if (!CRYPTO_THREAD_init_local(&default_context_thread_local, NULL)) goto err; diff --git a/crypto/initthread.c b/crypto/initthread.c index e4d830d7fc5085..02b2ac997813b9 100644 --- a/crypto/initthread.c +++ b/crypto/initthread.c @@ -201,9 +201,11 @@ static void init_thread_destructor(void *hands) int ossl_init_thread(void) { - if (!CRYPTO_THREAD_init_local(&destructor_key.value, - init_thread_destructor)) - return 0; + if (destructor_key.sane == -1) { + if (!CRYPTO_THREAD_init_local(&destructor_key.value, + init_thread_destructor)) + return 0; + } return 1; } diff --git a/test/threadstest.h b/test/threadstest.h index 3125cec3780eaf..8bdedd7052aca3 100644 --- a/test/threadstest.h +++ b/test/threadstest.h @@ -65,7 +65,6 @@ static void *thread_run(void *arg) *(void **) (&f) = arg; f(); - OPENSSL_thread_stop(); return NULL; }