diff options
Diffstat (limited to 'src/libstrongswan/plugins')
-rw-r--r-- | src/libstrongswan/plugins/openssl/openssl_plugin.c | 20 |
1 files changed, 13 insertions, 7 deletions
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); } |