aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/plugins')
-rw-r--r--src/libstrongswan/plugins/openssl/openssl_plugin.c20
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);
}