From: Bodo Möller Date: Wed, 20 Dec 2000 10:07:31 +0000 (+0000) Subject: Include CRYPTO_mem_leaks deadlock fix. X-Git-Tag: OpenSSL_0_9_6a-beta1~99 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2fb0c899c640908e2e302db895e9a8c4b5567ca2;p=oweals%2Fopenssl.git Include CRYPTO_mem_leaks deadlock fix. --- diff --git a/CHANGES b/CHANGES index ef4a089817..89018feff1 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,9 @@ [Bodo Moeller, Geoff Thorpe; original patch submitted by "Reddie, Steven" ] + *) Fix a deadlock in CRYPTO_mem_leaks(). + [Bodo Moeller] + *) rand_win.c fix for Borland C. [Ulf Möller] diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index 866c53e73a..ddf4be28ca 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -671,7 +671,15 @@ void CRYPTO_mem_leaks(BIO *b) * void_fn_to_char kludge in CRYPTO_mem_leaks_cb. * Otherwise the code police will come and get us.) */ + int old_mh_mode; + CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); + + /* avoid deadlock when lh_free() uses CRYPTO_dbg_free(), + * which uses CRYPTO_is_mem_check_on */ + old_mh_mode = mh_mode; + mh_mode = CRYPTO_MEM_CHECK_OFF; + if (mh != NULL) { lh_free(mh); @@ -685,6 +693,8 @@ void CRYPTO_mem_leaks(BIO *b) amih = NULL; } } + + mh_mode = old_mh_mode; CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); } MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */