diff options
Diffstat (limited to 'malloc')
-rw-r--r-- | malloc/mcheck.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/malloc/mcheck.c b/malloc/mcheck.c index 8612c8cf29..a9993c8d9d 100644 --- a/malloc/mcheck.c +++ b/malloc/mcheck.c @@ -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)); |