The branch master has been updated via 5a7ad1f08bfccbdad0f20920f9c284bba036fb70 (commit) from 6b1f413c3a8563a53e1b41d48d870c010541c7f5 (commit)
- Log ----------------------------------------------------------------- commit 5a7ad1f08bfccbdad0f20920f9c284bba036fb70 Author: Rich Salz <rs...@openssl.org> Date: Sat Aug 20 19:06:43 2016 -0400 Move BIO index lock creation Reviewed-by: Richard Levitte <levi...@openssl.org> ----------------------------------------------------------------------- Summary of changes: crypto/bio/b_addr.c | 4 +--- crypto/bio/bio_err.c | 1 + crypto/bio/bio_lib.c | 2 +- crypto/bio/bio_meth.c | 16 ++++++++++++++-- include/openssl/bio.h | 1 + 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 17ab3e4..f924e10 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -19,7 +19,6 @@ #include <ctype.h> CRYPTO_RWLOCK *bio_lookup_lock; -extern CRYPTO_RWLOCK *bio_type_lock; static CRYPTO_ONCE bio_lookup_init = CRYPTO_ONCE_STATIC_INIT; /* @@ -606,8 +605,7 @@ static int addrinfo_wrap(int family, int socktype, DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) { bio_lookup_lock = CRYPTO_THREAD_lock_new(); - bio_type_lock = CRYPTO_THREAD_lock_new(); - return bio_lookup_lock != NULL && bio_type_lock != NULL; + return bio_lookup_lock != NULL; } /*- diff --git a/crypto/bio/bio_err.c b/crypto/bio/bio_err.c index 8f88cb9..98c90d6 100644 --- a/crypto/bio/bio_err.c +++ b/crypto/bio/bio_err.c @@ -29,6 +29,7 @@ static ERR_STRING_DATA BIO_str_functs[] = { {ERR_FUNC(BIO_F_BIO_CTRL), "BIO_ctrl"}, {ERR_FUNC(BIO_F_BIO_GETS), "BIO_gets"}, {ERR_FUNC(BIO_F_BIO_GET_HOST_IP), "BIO_get_host_ip"}, + {ERR_FUNC(BIO_F_BIO_GET_NEW_INDEX), "BIO_get_new_index"}, {ERR_FUNC(BIO_F_BIO_GET_PORT), "BIO_get_port"}, {ERR_FUNC(BIO_F_BIO_LISTEN), "BIO_listen"}, {ERR_FUNC(BIO_F_BIO_LOOKUP), "BIO_lookup"}, diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c index 8a00103..62392c3 100644 --- a/crypto/bio/bio_lib.c +++ b/crypto/bio/bio_lib.c @@ -594,7 +594,7 @@ void bio_cleanup(void) bio_sock_cleanup_int(); CRYPTO_THREAD_lock_free(bio_lookup_lock); bio_lookup_lock = NULL; +#endif CRYPTO_THREAD_lock_free(bio_type_lock); bio_type_lock = NULL; -#endif } diff --git a/crypto/bio/bio_meth.c b/crypto/bio/bio_meth.c index 7754b00..c5f9f7e 100644 --- a/crypto/bio/bio_meth.c +++ b/crypto/bio/bio_meth.c @@ -8,14 +8,26 @@ */ #include "bio_lcl.h" +#include <internal/thread_once.h> -CRYPTO_RWLOCK *bio_type_lock; -static int bio_count = BIO_TYPE_START; +CRYPTO_RWLOCK *bio_type_lock = NULL; +static CRYPTO_ONCE bio_type_init = CRYPTO_ONCE_STATIC_INIT; + +DEFINE_RUN_ONCE_STATIC(do_bio_type_init) +{ + bio_type_lock = CRYPTO_THREAD_lock_new(); + return bio_type_lock != NULL; +} int BIO_get_new_index() { + static int bio_count = BIO_TYPE_START; int newval; + if (!RUN_ONCE(&bio_type_init, do_bio_type_init)) { + BIOerr(BIO_F_BIO_GET_NEW_INDEX, ERR_R_MALLOC_FAILURE); + return -1; + } if (!CRYPTO_atomic_add(&bio_count, 1, &newval, bio_type_lock)) return -1; return newval; diff --git a/include/openssl/bio.h b/include/openssl/bio.h index d733f47..31d41b4 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -779,6 +779,7 @@ int ERR_load_BIO_strings(void); # define BIO_F_BIO_CTRL 103 # define BIO_F_BIO_GETS 104 # define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_NEW_INDEX 102 # define BIO_F_BIO_GET_PORT 107 # define BIO_F_BIO_LISTEN 139 # define BIO_F_BIO_LOOKUP 135 _____ openssl-commits mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits