diff options
author | Matt Caswell <matt@openssl.org> | 2016-03-02 16:52:43 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-03-02 17:23:42 +0000 |
commit | ed49f43a0390217e1c2df0054fb7352523be9a58 (patch) | |
tree | 2110beb644b88a3cc3ce80c4495e59ef9189e535 | |
parent | 224905f8aaeac7fd81a49dc160a843c5fff60e6e (diff) | |
download | openssl-ed49f43a0390217e1c2df0054fb7352523be9a58.tar.gz |
Ensure Async is deinited properly
The global thread local keys were not being deinited properly in async.
Reviewed-by: Rich Salz <rsalz@openssl.org>
-rw-r--r-- | crypto/async/async.c | 2 | ||||
-rw-r--r-- | crypto/include/internal/async.h | 1 | ||||
-rw-r--r-- | crypto/init.c | 10 |
3 files changed, 11 insertions, 2 deletions
diff --git a/crypto/async/async.c b/crypto/async/async.c index 67e19c730f..b4ba561888 100644 --- a/crypto/async/async.c +++ b/crypto/async/async.c @@ -351,8 +351,6 @@ int async_init(void) return 1; } -/* TODO: FIXME: This needs to be called by something!!! */ -void async_deinit(void); void async_deinit(void) { CRYPTO_THREAD_cleanup_local(&ctxkey); diff --git a/crypto/include/internal/async.h b/crypto/include/internal/async.h index e5d426baf3..76fe4d1399 100644 --- a/crypto/include/internal/async.h +++ b/crypto/include/internal/async.h @@ -58,4 +58,5 @@ #include <openssl/async.h> int async_init(void); +void async_deinit(void); diff --git a/crypto/init.c b/crypto/init.c index cbe07df2a2..613606ebdc 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -580,6 +580,16 @@ void OPENSSL_cleanup(void) COMP_zlib_cleanup(); } +#ifndef OPENSSL_NO_ASYNC + if (async_inited) { +# ifdef OPENSSL_INIT_DEBUG + fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: " + "async_deinit()\n"); +# endif + async_deinit(); + } +#endif + #ifndef OPENSSL_NO_ENGINE if (engine_inited) { # ifdef OPENSSL_INIT_DEBUG |