From 2abc66b977c41f1a1240fe21c921a6df58bd4157 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 5 Nov 2008 12:37:37 +0000 Subject: proper cleanup of openssl locking code --- src/libstrongswan/plugins/openssl/openssl_plugin.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/libstrongswan/plugins/openssl/openssl_plugin.c b/src/libstrongswan/plugins/openssl/openssl_plugin.c index 744b6e89a..35df1b073 100644 --- a/src/libstrongswan/plugins/openssl/openssl_plugin.c +++ b/src/libstrongswan/plugins/openssl/openssl_plugin.c @@ -50,20 +50,23 @@ struct private_openssl_plugin_t { /** * Array of static mutexs, with CRYPTO_num_locks() mutex */ -static mutex_t **mutex; +static mutex_t **mutex = NULL; /** * Locking callback for static locks */ static void locking_function(int mode, int type, const char *file, int line) { - if (mode & CRYPTO_LOCK) + if (mutex) { - mutex[type]->lock(mutex[type]); - } - else - { - mutex[type]->unlock(mutex[type]); + if (mode & CRYPTO_LOCK) + { + mutex[type]->lock(mutex[type]); + } + else + { + mutex[type]->unlock(mutex[type]); + } } } @@ -155,6 +158,7 @@ static void threading_cleanup() mutex[i]->destroy(mutex[i]); } free(mutex); + mutex = NULL; } /** @@ -182,6 +186,8 @@ static void destroy(private_openssl_plugin_t *this) ENGINE_cleanup(); EVP_cleanup(); + threading_cleanup(); + free(this); } -- cgit v1.2.3