diff options
Diffstat (limited to 'malloc')
-rw-r--r-- | malloc/hooks.c | 2 | ||||
-rw-r--r-- | malloc/malloc.c | 21 |
2 files changed, 15 insertions, 8 deletions
diff --git a/malloc/hooks.c b/malloc/hooks.c index 4de558270f..8a94fd0be8 100644 --- a/malloc/hooks.c +++ b/malloc/hooks.c @@ -216,7 +216,7 @@ top_check() if((char*)t + chunksize(t) == mp_.sbrk_base + main_arena.system_mem || t == initial_top(&main_arena)) return 0; - malloc_printerr (check_action | 4, "malloc: top chunk is corrupt", NULL); + malloc_printerr (check_action, "malloc: top chunk is corrupt", t); /* Try to set up a new top chunk. */ brk = MORECORE(0); diff --git a/malloc/malloc.c b/malloc/malloc.c index 824b6cc3f4..0d0990cc35 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -5453,13 +5453,20 @@ malloc_printerr(int action, const char *str, void *ptr) } struct iovec iov[3]; - iov[0].iov_base = (char *) "*** glibc detected *** "; - iov[0].iov_len = strlen (iov[0].iov_base); - iov[1].iov_base = (char *) str; - iov[1].iov_len = strlen (str); - iov[2].iov_base = cp; - iov[2].iov_len = &buf[sizeof (buf) - 1] - cp; - TEMP_FAILURE_RETRY (__writev (STDERR_FILENO, iov, 3)); + int n = 0; + if ((action & 4) == 0) + { + iov[0].iov_base = (char *) "*** glibc detected *** "; + iov[0].iov_len = strlen (iov[0].iov_base); + ++n; + } + iov[n].iov_base = (char *) str; + iov[n].iov_len = strlen (str); + ++n; + iov[n].iov_base = cp; + iov[n].iov_len = &buf[sizeof (buf) - 1] - cp; + ++n; + TEMP_FAILURE_RETRY (__writev (STDERR_FILENO, iov, n)); } if (action & 2) abort (); |