X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Finit.c;h=1b94d07e0465a3216dfcf67b0d796ba32ca8545f;hp=8daf4e31cfa99553448d71f6c39e90f7242eaff2;hb=f61f62ea13470a00ae8be691d62abec97f94f0ee;hpb=c16de9d8329d41a2433d0f273c080d9d06ad7a87 diff --git a/crypto/init.c b/crypto/init.c index 8daf4e31cf..1b94d07e04 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -27,15 +27,6 @@ #include "internal/dso.h" #include "internal/store.h" - -typedef struct global_lock_st { - CRYPTO_RWLOCK *lock; - const char *name; - struct global_lock_st *next; -} GLOBAL_LOCK; - -static GLOBAL_LOCK *global_locks; - static int stopped = 0; static void ossl_init_thread_stop(struct thread_local_inits_st *locals); @@ -53,7 +44,7 @@ static struct thread_local_inits_st *ossl_init_get_thread_local(int alloc) CRYPTO_THREAD_get_local(&threadstopkey); if (local == NULL && alloc) { - local = OPENSSL_zalloc(sizeof *local); + local = OPENSSL_zalloc(sizeof(*local)); if (local != NULL && !CRYPTO_THREAD_set_local(&threadstopkey, local)) { OPENSSL_free(local); return NULL; @@ -72,9 +63,6 @@ struct ossl_init_stop_st { OPENSSL_INIT_STOP *next; }; -static CRYPTO_RWLOCK *glock_lock = NULL; -static CRYPTO_ONCE glock_once = CRYPTO_ONCE_STATIC_INIT; - static OPENSSL_INIT_STOP *stop_handlers = NULL; static CRYPTO_RWLOCK *init_lock = NULL; @@ -96,7 +84,6 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_base) #ifndef OPENSSL_SYS_UEFI atexit(OPENSSL_cleanup); #endif - /* Do not change this to glock's! */ if ((init_lock = CRYPTO_THREAD_lock_new()) == NULL) return 0; OPENSSL_cpuid_setup(); @@ -515,16 +502,6 @@ void OPENSSL_cleanup(void) obj_cleanup_int(); err_cleanup(); - /* Free list of global locks. */ - while (global_locks != NULL) { - GLOBAL_LOCK *next = global_locks->next; - - free(global_locks); - global_locks = next; - } - CRYPTO_THREAD_lock_free(glock_lock); - glock_lock = NULL; - base_inited = 0; } @@ -708,55 +685,7 @@ int OPENSSL_atexit(void (*handler)(void)) return 1; } -#ifndef OPENSSL_SYS_UNIX -CRYPTO_RWLOCK *CRYPTO_THREAD_glock_new(const char *name) -{ - return CRYPTO_THREAD_lock_new(); -} - -#else -DEFINE_RUN_ONCE_STATIC(glock_init) -{ - glock_lock = CRYPTO_THREAD_lock_new(); - return glock_lock != NULL; -} - -/* - * Create a new global lock, return NULL on error. - */ -CRYPTO_RWLOCK *CRYPTO_THREAD_glock_new(const char *name) -{ - GLOBAL_LOCK *newlock; - - if (glock_lock == NULL && !RUN_ONCE(&glock_once, glock_init)) - return NULL; - if ((newlock = malloc(sizeof(*newlock))) == NULL) - return NULL; - if ((newlock->lock = CRYPTO_THREAD_lock_new()) == NULL) { - free(newlock); - return NULL; - } - newlock->name = name; - CRYPTO_THREAD_write_lock(glock_lock); - newlock->next = global_locks; - global_locks = newlock; - CRYPTO_THREAD_unlock(glock_lock); - return newlock->lock; -} - -/* - * Unlock all global locks. - */ -static void unlock_all(void) -{ - GLOBAL_LOCK *lp; - - CRYPTO_THREAD_write_lock(glock_lock); - for (lp = global_locks; lp != NULL; lp = lp->next) - CRYPTO_THREAD_unlock(lp->lock); - CRYPTO_THREAD_unlock(glock_lock); -} - +#ifdef OPENSSL_SYS_UNIX /* * The following three functions are for OpenSSL developers. This is * where we set/reset state across fork (called via pthread_atfork when @@ -770,22 +699,14 @@ static void unlock_all(void) void OPENSSL_fork_prepare(void) { - GLOBAL_LOCK *lp; - - CRYPTO_THREAD_write_lock(glock_lock); - for (lp = global_locks; lp != NULL; lp = lp->next) - CRYPTO_THREAD_write_lock(lp->lock); - CRYPTO_THREAD_unlock(glock_lock); } void OPENSSL_fork_parent(void) { - unlock_all(); } void OPENSSL_fork_child(void) { - unlock_all(); rand_fork(); } #endif