aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2016-03-02 16:52:43 +0000
committerMatt Caswell <matt@openssl.org>2016-03-02 17:23:42 +0000
commited49f43a0390217e1c2df0054fb7352523be9a58 (patch)
tree2110beb644b88a3cc3ce80c4495e59ef9189e535
parent224905f8aaeac7fd81a49dc160a843c5fff60e6e (diff)
downloadopenssl-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.c2
-rw-r--r--crypto/include/internal/async.h1
-rw-r--r--crypto/init.c10
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