Loading crypto/bio/b_addr.c +2 −1 Original line number Diff line number Diff line Loading @@ -603,7 +603,8 @@ static int addrinfo_wrap(int family, int socktype, DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; bio_lookup_lock = CRYPTO_THREAD_lock_new(); return bio_lookup_lock != NULL; } Loading crypto/engine/eng_lib.c +2 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,8 @@ CRYPTO_ONCE engine_lock_init = CRYPTO_ONCE_STATIC_INIT; DEFINE_RUN_ONCE(do_engine_lock_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; global_engine_lock = CRYPTO_THREAD_lock_new(); return global_engine_lock != NULL; } Loading crypto/err/err.c +44 −5 Original line number Diff line number Diff line Loading @@ -265,11 +265,19 @@ static void ERR_STATE_free(ERR_STATE *s) DEFINE_RUN_ONCE_STATIC(do_err_strings_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; err_string_lock = CRYPTO_THREAD_lock_new(); if (err_string_lock == NULL) return 0; int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash, err_string_data_cmp); return err_string_lock != NULL && int_error_hash != NULL; if (int_error_hash == NULL) { CRYPTO_THREAD_lock_free(err_string_lock); err_string_lock = NULL; return 0; } return 1; } void err_cleanup(void) Loading Loading @@ -662,7 +670,10 @@ DEFINE_RUN_ONCE_STATIC(err_do_init) ERR_STATE *ERR_get_state(void) { ERR_STATE *state = NULL; ERR_STATE *state; if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL)) return NULL; if (!RUN_ONCE(&err_init, err_do_init)) return NULL; Loading Loading @@ -694,13 +705,41 @@ ERR_STATE *ERR_get_state(void) return state; } /* * err_shelve_state returns the current thread local error state * and freezes the error module until err_unshelve_state is called. */ int err_shelve_state(void **state) { if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL)) return 0; if (!RUN_ONCE(&err_init, err_do_init)) return 0; *state = CRYPTO_THREAD_get_local(&err_thread_local); if (!CRYPTO_THREAD_set_local(&err_thread_local, (ERR_STATE*)-1)) return 0; return 1; } /* * err_unshelve_state restores the error state that was returned * by err_shelve_state previously. */ void err_unshelve_state(void* state) { if (state != (void*)-1) CRYPTO_THREAD_set_local(&err_thread_local, (ERR_STATE*)state); } int ERR_get_next_error_library(void) { int ret; if (!RUN_ONCE(&err_string_init, do_err_strings_init)) { if (!RUN_ONCE(&err_string_init, do_err_strings_init)) return 0; } CRYPTO_THREAD_write_lock(err_string_lock); ret = int_err_library_number++; Loading crypto/ex_data.c +2 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ static CRYPTO_ONCE ex_data_init = CRYPTO_ONCE_STATIC_INIT; DEFINE_RUN_ONCE_STATIC(do_ex_data_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; ex_data_lock = CRYPTO_THREAD_lock_new(); return ex_data_lock != NULL; } Loading crypto/include/internal/cryptlib_int.h +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ int ossl_init_thread_start(uint64_t opts); * use". */ # define OPENSSL_INIT_ZLIB 0x00010000L # define OPENSSL_INIT_BASE_ONLY 0x00040000L /* OPENSSL_INIT_THREAD flags */ # define OPENSSL_INIT_THREAD_ASYNC 0x01 Loading Loading
crypto/bio/b_addr.c +2 −1 Original line number Diff line number Diff line Loading @@ -603,7 +603,8 @@ static int addrinfo_wrap(int family, int socktype, DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; bio_lookup_lock = CRYPTO_THREAD_lock_new(); return bio_lookup_lock != NULL; } Loading
crypto/engine/eng_lib.c +2 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,8 @@ CRYPTO_ONCE engine_lock_init = CRYPTO_ONCE_STATIC_INIT; DEFINE_RUN_ONCE(do_engine_lock_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; global_engine_lock = CRYPTO_THREAD_lock_new(); return global_engine_lock != NULL; } Loading
crypto/err/err.c +44 −5 Original line number Diff line number Diff line Loading @@ -265,11 +265,19 @@ static void ERR_STATE_free(ERR_STATE *s) DEFINE_RUN_ONCE_STATIC(do_err_strings_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; err_string_lock = CRYPTO_THREAD_lock_new(); if (err_string_lock == NULL) return 0; int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash, err_string_data_cmp); return err_string_lock != NULL && int_error_hash != NULL; if (int_error_hash == NULL) { CRYPTO_THREAD_lock_free(err_string_lock); err_string_lock = NULL; return 0; } return 1; } void err_cleanup(void) Loading Loading @@ -662,7 +670,10 @@ DEFINE_RUN_ONCE_STATIC(err_do_init) ERR_STATE *ERR_get_state(void) { ERR_STATE *state = NULL; ERR_STATE *state; if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL)) return NULL; if (!RUN_ONCE(&err_init, err_do_init)) return NULL; Loading Loading @@ -694,13 +705,41 @@ ERR_STATE *ERR_get_state(void) return state; } /* * err_shelve_state returns the current thread local error state * and freezes the error module until err_unshelve_state is called. */ int err_shelve_state(void **state) { if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL)) return 0; if (!RUN_ONCE(&err_init, err_do_init)) return 0; *state = CRYPTO_THREAD_get_local(&err_thread_local); if (!CRYPTO_THREAD_set_local(&err_thread_local, (ERR_STATE*)-1)) return 0; return 1; } /* * err_unshelve_state restores the error state that was returned * by err_shelve_state previously. */ void err_unshelve_state(void* state) { if (state != (void*)-1) CRYPTO_THREAD_set_local(&err_thread_local, (ERR_STATE*)state); } int ERR_get_next_error_library(void) { int ret; if (!RUN_ONCE(&err_string_init, do_err_strings_init)) { if (!RUN_ONCE(&err_string_init, do_err_strings_init)) return 0; } CRYPTO_THREAD_write_lock(err_string_lock); ret = int_err_library_number++; Loading
crypto/ex_data.c +2 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ static CRYPTO_ONCE ex_data_init = CRYPTO_ONCE_STATIC_INIT; DEFINE_RUN_ONCE_STATIC(do_ex_data_init) { OPENSSL_init_crypto(0, NULL); if (!OPENSSL_init_crypto(0, NULL)) return 0; ex_data_lock = CRYPTO_THREAD_lock_new(); return ex_data_lock != NULL; } Loading
crypto/include/internal/cryptlib_int.h +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ int ossl_init_thread_start(uint64_t opts); * use". */ # define OPENSSL_INIT_ZLIB 0x00010000L # define OPENSSL_INIT_BASE_ONLY 0x00040000L /* OPENSSL_INIT_THREAD flags */ # define OPENSSL_INIT_THREAD_ASYNC 0x01 Loading