diff options
Diffstat (limited to 'malloc/malloc.c')
-rw-r--r-- | malloc/malloc.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c index 6b89083880..442f17e71a 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -4139,7 +4139,18 @@ _int_free(mstate av, Void_t* mem) if (__builtin_expect ((uintptr_t) p > (uintptr_t) -size, 0)) { if (check_action & 1) - fprintf (stderr, "free(): invalid pointer %p!\n", mem); + { +#ifdef _LIBC + _IO_flockfile (stderr); + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; +#endif + fprintf (stderr, "free(): invalid pointer %p!\n", mem); +#ifdef _LIBC + ((_IO_FILE *) stderr)->_flags2 |= old_flags2; + _IO_funlockfile (stderr); +#endif + } if (check_action & 2) abort (); return; @@ -5108,6 +5119,11 @@ void mSTATs() if(__malloc_initialized < 0) ptmalloc_init (); +#ifdef _LIBC + _IO_flockfile (stderr); + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; +#endif for (i=0, ar_ptr = &main_arena;; i++) { (void)mutex_lock(&ar_ptr->mutex); mi = mALLINFo(ar_ptr); @@ -5152,6 +5168,10 @@ void mSTATs() fprintf(stderr, "locked total = %10ld\n", stat_lock_direct + stat_lock_loop + stat_lock_wait); #endif +#ifdef _LIBC + ((_IO_FILE *) stderr)->_flags2 |= old_flags2; + _IO_funlockfile (stderr); +#endif } |