Loading crypto/bio/b_addr.c +8 −2 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #ifndef OPENSSL_NO_SOCK #include <openssl/err.h> #include <openssl/buffer.h> #include <internal/thread_once.h> #include <ctype.h> CRYPTO_RWLOCK *bio_lookup_lock; Loading Loading @@ -601,9 +602,10 @@ static int addrinfo_wrap(int family, int socktype, return 1; } static void do_bio_lookup_init(void) DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) { bio_lookup_lock = CRYPTO_THREAD_lock_new(); return (bio_lookup_lock != NULL); } /*- Loading Loading @@ -727,7 +729,11 @@ int BIO_lookup(const char *host, const char *service, struct servent se_fallback = { NULL, NULL, 0, NULL }; #endif CRYPTO_THREAD_run_once(&bio_lookup_init, do_bio_lookup_init); if (!RUN_ONCE(&bio_lookup_init, do_bio_lookup_init)) { BIOerr(BIO_F_BIO_LOOKUP, ERR_R_MALLOC_FAILURE); ret = 0; goto err; } CRYPTO_THREAD_write_lock(bio_lookup_lock); he_fallback_address = INADDR_ANY; Loading crypto/engine/eng_init.c +4 −1 Original line number Diff line number Diff line Loading @@ -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); Loading crypto/engine/eng_int.h +2 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ # include "internal/cryptlib.h" # include <internal/engine.h> # include <internal/thread_once.h> #ifdef __cplusplus extern "C" { Loading Loading @@ -123,7 +124,7 @@ void engine_pkey_asn1_meths_free(ENGINE *e); /* Once initialisation function */ extern CRYPTO_ONCE engine_lock_init; void do_engine_lock_init(void); DECLARE_RUN_ONCE(do_engine_lock_init) /* * This is a structure for storing implementations of various crypto Loading crypto/engine/eng_lib.c +4 −5 Original line number Diff line number Diff line Loading @@ -16,19 +16,18 @@ CRYPTO_ONCE engine_lock_init = CRYPTO_ONCE_STATIC_INIT; /* The "new"/"free" stuff first */ void do_engine_lock_init(void) DEFINE_RUN_ONCE(do_engine_lock_init) { global_engine_lock = CRYPTO_THREAD_lock_new(); return global_engine_lock != NULL; } ENGINE *ENGINE_new(void) { ENGINE *ret; CRYPTO_THREAD_run_once(&engine_lock_init, do_engine_lock_init); ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { if (!RUN_ONCE(&engine_lock_init, do_engine_lock_init) || (ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) { ENGINEerr(ENGINE_F_ENGINE_NEW, ERR_R_MALLOC_FAILURE); return NULL; } Loading crypto/engine/eng_list.c +15 −3 Original line number Diff line number Diff line Loading @@ -136,7 +136,11 @@ ENGINE *ENGINE_get_first(void) { ENGINE *ret; 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_GET_FIRST, ERR_R_MALLOC_FAILURE); return NULL; } CRYPTO_THREAD_write_lock(global_engine_lock); ret = engine_list_head; if (ret) { Loading @@ -151,7 +155,11 @@ ENGINE *ENGINE_get_last(void) { ENGINE *ret; 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_GET_LAST, ERR_R_MALLOC_FAILURE); return NULL; } CRYPTO_THREAD_write_lock(global_engine_lock); ret = engine_list_tail; if (ret) { Loading Loading @@ -279,7 +287,11 @@ ENGINE *ENGINE_by_id(const char *id) ENGINEerr(ENGINE_F_ENGINE_BY_ID, ERR_R_PASSED_NULL_PARAMETER); return NULL; } 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_BY_ID, ERR_R_MALLOC_FAILURE); return NULL; } CRYPTO_THREAD_write_lock(global_engine_lock); iterator = engine_list_head; while (iterator && (strcmp(id, iterator->id) != 0)) Loading Loading
crypto/bio/b_addr.c +8 −2 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #ifndef OPENSSL_NO_SOCK #include <openssl/err.h> #include <openssl/buffer.h> #include <internal/thread_once.h> #include <ctype.h> CRYPTO_RWLOCK *bio_lookup_lock; Loading Loading @@ -601,9 +602,10 @@ static int addrinfo_wrap(int family, int socktype, return 1; } static void do_bio_lookup_init(void) DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) { bio_lookup_lock = CRYPTO_THREAD_lock_new(); return (bio_lookup_lock != NULL); } /*- Loading Loading @@ -727,7 +729,11 @@ int BIO_lookup(const char *host, const char *service, struct servent se_fallback = { NULL, NULL, 0, NULL }; #endif CRYPTO_THREAD_run_once(&bio_lookup_init, do_bio_lookup_init); if (!RUN_ONCE(&bio_lookup_init, do_bio_lookup_init)) { BIOerr(BIO_F_BIO_LOOKUP, ERR_R_MALLOC_FAILURE); ret = 0; goto err; } CRYPTO_THREAD_write_lock(bio_lookup_lock); he_fallback_address = INADDR_ANY; Loading
crypto/engine/eng_init.c +4 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
crypto/engine/eng_int.h +2 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ # include "internal/cryptlib.h" # include <internal/engine.h> # include <internal/thread_once.h> #ifdef __cplusplus extern "C" { Loading Loading @@ -123,7 +124,7 @@ void engine_pkey_asn1_meths_free(ENGINE *e); /* Once initialisation function */ extern CRYPTO_ONCE engine_lock_init; void do_engine_lock_init(void); DECLARE_RUN_ONCE(do_engine_lock_init) /* * This is a structure for storing implementations of various crypto Loading
crypto/engine/eng_lib.c +4 −5 Original line number Diff line number Diff line Loading @@ -16,19 +16,18 @@ CRYPTO_ONCE engine_lock_init = CRYPTO_ONCE_STATIC_INIT; /* The "new"/"free" stuff first */ void do_engine_lock_init(void) DEFINE_RUN_ONCE(do_engine_lock_init) { global_engine_lock = CRYPTO_THREAD_lock_new(); return global_engine_lock != NULL; } ENGINE *ENGINE_new(void) { ENGINE *ret; CRYPTO_THREAD_run_once(&engine_lock_init, do_engine_lock_init); ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { if (!RUN_ONCE(&engine_lock_init, do_engine_lock_init) || (ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) { ENGINEerr(ENGINE_F_ENGINE_NEW, ERR_R_MALLOC_FAILURE); return NULL; } Loading
crypto/engine/eng_list.c +15 −3 Original line number Diff line number Diff line Loading @@ -136,7 +136,11 @@ ENGINE *ENGINE_get_first(void) { ENGINE *ret; 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_GET_FIRST, ERR_R_MALLOC_FAILURE); return NULL; } CRYPTO_THREAD_write_lock(global_engine_lock); ret = engine_list_head; if (ret) { Loading @@ -151,7 +155,11 @@ ENGINE *ENGINE_get_last(void) { ENGINE *ret; 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_GET_LAST, ERR_R_MALLOC_FAILURE); return NULL; } CRYPTO_THREAD_write_lock(global_engine_lock); ret = engine_list_tail; if (ret) { Loading Loading @@ -279,7 +287,11 @@ ENGINE *ENGINE_by_id(const char *id) ENGINEerr(ENGINE_F_ENGINE_BY_ID, ERR_R_PASSED_NULL_PARAMETER); return NULL; } 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_BY_ID, ERR_R_MALLOC_FAILURE); return NULL; } CRYPTO_THREAD_write_lock(global_engine_lock); iterator = engine_list_head; while (iterator && (strcmp(id, iterator->id) != 0)) Loading