Commit 5a7ad1f0 authored by Rich Salz's avatar Rich Salz
Browse files

Move BIO index lock creation

parent 6b1f413c
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -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;
}

/*-
+1 −0
Original line number Diff line number Diff line
@@ -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"},
+1 −1
Original line number Diff line number Diff line
@@ -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
}
+14 −2
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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