Provide a thread stop API
authorMatt Caswell <matt@openssl.org>
Tue, 9 Feb 2016 09:13:45 +0000 (09:13 +0000)
committerMatt Caswell <matt@openssl.org>
Tue, 9 Feb 2016 15:11:38 +0000 (15:11 +0000)
Add the OPENSSL_INIT_thread_stop() function.

Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/cryptlib.c
crypto/include/internal/cryptlib_int.h
crypto/init.c
include/openssl/crypto.h

index 138708b8672c7770bb7203dda150b841b41a7747..b53081830f858eb64fddcbd0bd7e84c596505a21 100644 (file)
@@ -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;
index 2906921a09b419b460cb1565bc9a1c1c5bbe570e..36c0a10e036f3d8aad2031418d7e1455f3a2e4ce 100644 (file)
@@ -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
index 53ed235699a1543c8874724aa2fe000fc3c9bf86..856b06afddde245888dd8e1e14de83a28f27ad7c 100644 (file)
@@ -77,6 +77,8 @@
 #include <internal/err.h>
 #include <stdlib.h>
 
+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);
index 6529bf4dd464bde9110d72ba248ea05c2f899e52..a5501c98fb82b162b18220c41fd0dc5221d23f8d 100644 (file)
@@ -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 */
 /*