From 71567a6f418ed1dc42d4c5ec57f72d3119b75966 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Tue, 9 Feb 2016 09:13:45 +0000 Subject: [PATCH] Provide a thread stop API Add the OPENSSL_INIT_thread_stop() function. Reviewed-by: Richard Levitte --- crypto/cryptlib.c | 3 +-- crypto/include/internal/cryptlib_int.h | 1 - crypto/init.c | 10 +++++++++- include/openssl/crypto.h | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 138708b867..b53081830f 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -234,8 +234,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: - ossl_init_thread_stop( - (struct thread_local_inits_st *)ossl_init_get_thread_local(0)); + OPENSSL_INIT_thread_stop(); break; case DLL_PROCESS_DETACH: break; diff --git a/crypto/include/internal/cryptlib_int.h b/crypto/include/internal/cryptlib_int.h index 2906921a09..36c0a10e03 100644 --- a/crypto/include/internal/cryptlib_int.h +++ b/crypto/include/internal/cryptlib_int.h @@ -65,7 +65,6 @@ struct thread_local_inits_st { }; void *ossl_init_get_thread_local(int alloc); int ossl_init_thread_start(uint64_t opts); -void ossl_init_thread_stop(struct thread_local_inits_st *locals); /* * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below * are those ommitted from crypto.h because they are "reserverd for internal diff --git a/crypto/init.c b/crypto/init.c index 53ed235699..856b06afdd 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -77,6 +77,8 @@ #include #include +static void ossl_init_thread_stop(struct thread_local_inits_st *locals); + /* Implement "once" functionality */ #if !defined(OPENSSL_THREADS) typedef int OPENSSL_INIT_ONCE; @@ -466,7 +468,7 @@ static void ossl_init_zlib(void) zlib_inited = 1; } -void ossl_init_thread_stop(struct thread_local_inits_st *locals) +static void ossl_init_thread_stop(struct thread_local_inits_st *locals) { /* Can't do much about this */ if (locals == NULL) @@ -492,6 +494,12 @@ void ossl_init_thread_stop(struct thread_local_inits_st *locals) ossl_init_thread_stop_cleanup(); } +void OPENSSL_INIT_thread_stop(void) +{ + ossl_init_thread_stop( + (struct thread_local_inits_st *)ossl_init_get_thread_local(0)); +} + int ossl_init_thread_start(uint64_t opts) { struct thread_local_inits_st *locals = ossl_init_get_thread_local(1); diff --git a/include/openssl/crypto.h b/include/openssl/crypto.h index 6529bf4dd4..a5501c98fb 100644 --- a/include/openssl/crypto.h +++ b/include/openssl/crypto.h @@ -601,6 +601,7 @@ void OPENSSL_INIT_library_stop(void); void OPENSSL_INIT_crypto_library_start(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); int OPENSSL_INIT_register_stop_handler(void (*handler)(void)); +void OPENSSL_INIT_thread_stop(void); /* BEGIN ERROR CODES */ /* -- 2.25.1