[openssl-commits] [openssl] master update
Rich Salz
rsalz at openssl.org
Sun Aug 21 18:18:29 UTC 2016
The branch master has been updated
via 5a7ad1f08bfccbdad0f20920f9c284bba036fb70 (commit)
from 6b1f413c3a8563a53e1b41d48d870c010541c7f5 (commit)
- Log -----------------------------------------------------------------
commit 5a7ad1f08bfccbdad0f20920f9c284bba036fb70
Author: Rich Salz <rsalz at openssl.org>
Date: Sat Aug 20 19:06:43 2016 -0400
Move BIO index lock creation
Reviewed-by: Richard Levitte <levitte at 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
More information about the openssl-commits
mailing list