Commit c292b105 authored by Matt Caswell's avatar Matt Caswell
Browse files

Remove use of CRYPTO_LOCK_INIT in init code



Swap the use of CRYPTO_LOCK_INIT in the init code to use the new threading
API mechanism for locking.

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent a072ed0c
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ struct ossl_init_stop_st {
};

static OPENSSL_INIT_STOP *stop_handlers = NULL;
static CRYPTO_RWLOCK *init_lock = NULL;

static CRYPTO_ONCE base = CRYPTO_ONCE_STATIC_INIT;
static int base_inited = 0;
@@ -121,6 +122,7 @@ static void ossl_init_base(void)
#ifndef OPENSSL_SYS_UEFI
    atexit(OPENSSL_cleanup);
#endif
    init_lock = CRYPTO_THREAD_lock_new();
    OPENSSL_cpuid_setup();
    base_inited = 1;
}
@@ -425,6 +427,9 @@ void OPENSSL_cleanup(void)
        OPENSSL_free(lasthandler);
    }
    stop_handlers = NULL;

    CRYPTO_THREAD_lock_free(init_lock);

    /*
     * We assume we are single-threaded for this function, i.e. no race
     * conditions for the various "*_inited" vars below.
@@ -544,10 +549,10 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings)

    if (opts & OPENSSL_INIT_LOAD_CONFIG) {
        int ret;
        CRYPTO_w_lock(CRYPTO_LOCK_INIT);
        CRYPTO_THREAD_write_lock(init_lock);
        config_filename = (settings == NULL) ? NULL : settings->config_name;
        ret = CRYPTO_THREAD_run_once(&config, ossl_init_config);
        CRYPTO_w_unlock(CRYPTO_LOCK_INIT);
        CRYPTO_THREAD_unlock(init_lock);
        if (!ret)
            return 0;
    }
+1 −2
Original line number Diff line number Diff line
@@ -163,8 +163,7 @@ static const char *const lock_names[CRYPTO_NUM_LOCKS] = {
    "comp",
    "fips",
    "fips2",
    "init",
#if CRYPTO_NUM_LOCKS != 42
#if CRYPTO_NUM_LOCKS != 41
# error "Inconsistency between crypto.h and cryptlib.c"
#endif
};
+1 −2
Original line number Diff line number Diff line
@@ -205,8 +205,7 @@ extern "C" {
# define CRYPTO_LOCK_COMP                38
# define CRYPTO_LOCK_FIPS                39
# define CRYPTO_LOCK_FIPS2               40
# define CRYPTO_LOCK_INIT                41
# define CRYPTO_NUM_LOCKS                42
# define CRYPTO_NUM_LOCKS                41

# define CRYPTO_LOCK             1
# define CRYPTO_UNLOCK           2