(checkhdr): Disable mcheck before reporting an error. Don't run any tests if mcheck...
authorUlrich Drepper <drepper@redhat.com>
Fri, 27 Jul 2001 05:01:11 +0000 (05:01 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 27 Jul 2001 05:01:11 +0000 (05:01 +0000)
malloc/mcheck.c

index 8612c8c..a9993c8 100644 (file)
@@ -55,6 +55,8 @@ struct hdr
    It is only constructed if the pedantic testing is requested.  */
 static struct hdr *root;
 
+static int mcheck_used;
+
 /* Nonzero if pedentic checking of all blocks is requested.  */
 static int pedantic;
 
@@ -81,6 +83,12 @@ checkhdr (hdr)
      const struct hdr *hdr;
 {
   enum mcheck_status status;
+
+  if (!mcheck_used)
+    /* Maybe the mcheck used is disabled?  This happens when we find
+       an error and report it.  */
+    return MCHECK_OK;
+
   switch (hdr->magic ^ ((uintptr_t) hdr->prev + (uintptr_t) hdr->next))
     {
     default:
@@ -97,7 +105,11 @@ checkhdr (hdr)
       break;
     }
   if (status != MCHECK_OK)
-    (*abortfunc) (status);
+    {
+      mcheck_used = 0;
+      (*abortfunc) (status);
+      mcheck_used = 1;
+    }
   return status;
 }
 
@@ -302,8 +314,6 @@ mabort (status)
 #endif
 }
 
-static int mcheck_used;
-
 int
 mcheck (func)
      void (*func) __P ((enum mcheck_status));