Include CRYPTO_mem_leaks deadlock fix.
authorBodo Möller <bodo@openssl.org>
Wed, 20 Dec 2000 10:07:31 +0000 (10:07 +0000)
committerBodo Möller <bodo@openssl.org>
Wed, 20 Dec 2000 10:07:31 +0000 (10:07 +0000)
CHANGES
crypto/mem_dbg.c

diff --git a/CHANGES b/CHANGES
index ef4a089817040ad7d8e7ff90bde19850c5dbf6a6..89018feff17765b63afa4a01fbba00b8c88695e0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -18,6 +18,9 @@
      [Bodo Moeller, Geoff Thorpe; original patch submitted by
      "Reddie, Steven" <Steven.Reddie@ca.com>]
 
+  *) Fix a deadlock in CRYPTO_mem_leaks().
+     [Bodo Moeller]
+
   *) rand_win.c fix for Borland C.
      [Ulf Möller]
  
index 866c53e73a927e4fff3bdd381111bc80ef1c7f9c..ddf4be28caa87723a3e3d99b7796965d992f1f31 100644 (file)
@@ -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 */