Commit 71567a6f authored by Matt Caswell's avatar Matt Caswell
Browse files

Provide a thread stop API



Add the OPENSSL_INIT_thread_stop() function.

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent 8793f012
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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;
+0 −1
Original line number Diff line number Diff line
@@ -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
+9 −1
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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 */
/*