summaryrefslogtreecommitdiffstats
path: root/crypto/mem_dbg.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2016-07-20 02:57:23 +0100
committerDr. Stephen Henson <steve@openssl.org>2016-07-20 12:41:31 +0100
commit23dd0c9f8dc6f7edf4b872d13e5644dfbbee585b (patch)
tree4aae1fa2eeb65c1972fbcab7b51ec44f1174e173 /crypto/mem_dbg.c
parent2f8e53d7944b3d659c8ae678163eb0f096a6d992 (diff)
fix crypto-mdebug build
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/mem_dbg.c')
-rw-r--r--crypto/mem_dbg.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c
index 0307c02517..dc3f8ff571 100644
--- a/crypto/mem_dbg.c
+++ b/crypto/mem_dbg.c
@@ -11,6 +11,7 @@
#include <stdlib.h>
#include <time.h>
#include "internal/cryptlib.h"
+#include "internal/thread_once.h"
#include <openssl/crypto.h>
#include <openssl/buffer.h>
#include "internal/bio.h"
@@ -87,11 +88,19 @@ static unsigned int num_disable = 0;
*/
static CRYPTO_THREAD_ID disabling_threadid;
-static void do_memdbg_init(void)
+DEFINE_RUN_ONCE_STATIC(do_memdbg_init)
{
malloc_lock = CRYPTO_THREAD_lock_new();
long_malloc_lock = CRYPTO_THREAD_lock_new();
- CRYPTO_THREAD_init_local(&appinfokey, NULL);
+ if (malloc_lock == NULL || long_malloc_lock == NULL
+ || !CRYPTO_THREAD_init_local(&appinfokey, NULL)) {
+ CRYPTO_THREAD_lock_free(malloc_lock);
+ malloc_lock = NULL;
+ CRYPTO_THREAD_lock_free(long_malloc_lock);
+ long_malloc_lock = NULL;
+ return 0;
+ }
+ return 1;
}
static void app_info_free(APP_INFO *inf)