[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