diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-08-21 20:19:54 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-08-21 20:19:54 +0000 |
commit | 3e030bd5f9fa57f79a509565b5de6a1c0360d953 (patch) | |
tree | 69650e46945d47a7c32f6c1e0992e2251a81ba75 /malloc/hooks.c | |
parent | 51ea6fc094544328c08c367bc40a3b830b8fe7e8 (diff) | |
download | glibc-3e030bd5f9fa57f79a509565b5de6a1c0360d953.tar.gz glibc-3e030bd5f9fa57f79a509565b5de6a1c0360d953.tar.xz glibc-3e030bd5f9fa57f79a509565b5de6a1c0360d953.zip |
Update.
* malloc/hooks.c (DEFAULT_CHECK_ACTION): Moved to malloc.c. (check_action): Likewise. When printing error messages, use malloc_printf_nc now instead of fiddling with the streams cancellation flag in every place. * malloc/malloc.c (DEFAULT_CHECK_ACTION): New definition. Change default to 3. (check_action): New variable. (unlink): Print error message and eventually terminate in case list is corrupted. (malloc_printf_nc): New function. Use it in _int_free. Change proposed by Arjan van de Ven.
Diffstat (limited to 'malloc/hooks.c')
-rw-r--r-- | malloc/hooks.c | 71 |
1 files changed, 6 insertions, 65 deletions
diff --git a/malloc/hooks.c b/malloc/hooks.c index 020657a368..ebb37de969 100644 --- a/malloc/hooks.c +++ b/malloc/hooks.c @@ -1,5 +1,5 @@ /* Malloc implementation for multiple threads without lock contention. - Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger <wg@malloc.de>, 2001. @@ -20,10 +20,6 @@ /* $Id$ */ -#ifndef DEFAULT_CHECK_ACTION -#define DEFAULT_CHECK_ACTION 1 -#endif - /* What to do if the standard debugging hooks are in place and a corrupt pointer is detected: do nothing (0), print an error message (1), or call abort() (2). */ @@ -71,9 +67,6 @@ memalign_hook_ini(alignment, sz, caller) return public_mEMALIGn(alignment, sz); } - -static int check_action = DEFAULT_CHECK_ACTION; - /* Whether we are using malloc checking. */ static int using_malloc_checking; @@ -106,18 +99,7 @@ __malloc_check_init() __realloc_hook = realloc_check; __memalign_hook = memalign_check; if(check_action & 1) - { -#ifdef _LIBC - _IO_flockfile (stderr); - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; -#endif - fprintf(stderr, "malloc: using debugging hooks\n"); -#ifdef _LIBC - ((_IO_FILE *) stderr)->_flags2 |= old_flags2; - _IO_funlockfile (stderr); -#endif - } + malloc_printf_nc (1, "malloc: using debugging hooks\n"); } /* A simple, standard set of debugging hooks. Overhead is `only' one @@ -234,21 +216,7 @@ top_check() if((char*)t + chunksize(t) == mp_.sbrk_base + main_arena.system_mem || t == initial_top(&main_arena)) return 0; - if(check_action & 1) - { -#ifdef _LIBC - _IO_flockfile (stderr); - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; -#endif - fprintf(stderr, "malloc: top chunk is corrupt\n"); -#ifdef _LIBC - ((_IO_FILE *) stderr)->_flags2 |= old_flags2; - _IO_funlockfile (stderr); -#endif - } - if(check_action & 2) - abort(); + malloc_printf_nc (check_action, "malloc: top chunk is corrupt\n"); /* Try to set up a new top chunk. */ brk = MORECORE(0); @@ -299,21 +267,8 @@ free_check(mem, caller) Void_t* mem; const Void_t *caller; p = mem2chunk_check(mem); if(!p) { (void)mutex_unlock(&main_arena.mutex); - if(check_action & 1) - { -#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(); + + malloc_printf_nc(check_action, "free(): invalid pointer %p!\n", mem); return; } #if HAVE_MMAP @@ -347,21 +302,7 @@ realloc_check(oldmem, bytes, caller) oldp = mem2chunk_check(oldmem); (void)mutex_unlock(&main_arena.mutex); if(!oldp) { - if(check_action & 1) - { -#ifdef _LIBC - _IO_flockfile (stderr); - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; -#endif - fprintf(stderr, "realloc(): invalid pointer %p!\n", oldmem); -#ifdef _LIBC - ((_IO_FILE *) stderr)->_flags2 |= old_flags2; - _IO_funlockfile (stderr); -#endif - } - if(check_action & 2) - abort(); + malloc_printf_nc(check_action, "realloc(): invalid pointer %p!\n", oldmem); return malloc_check(bytes, NULL); } oldsize = chunksize(oldp); |