diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/util/u_debug_memory.c | 106 |
1 files changed, 53 insertions, 53 deletions
diff --git a/src/gallium/auxiliary/util/u_debug_memory.c b/src/gallium/auxiliary/util/u_debug_memory.c index 1ba553cb6e7..0a52daa5b47 100644 --- a/src/gallium/auxiliary/util/u_debug_memory.c +++ b/src/gallium/auxiliary/util/u_debug_memory.c @@ -1,8 +1,8 @@ /************************************************************************** - * + * * Copyright 2008 VMware, Inc. * All Rights Reserved. - * + * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including @@ -10,11 +10,11 @@ * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: - * + * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. @@ -22,17 +22,17 @@ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * + * **************************************************************************/ /** * @file * Memory debugging. - * + * * @author José Fonseca <[email protected]> */ -#include "pipe/p_config.h" +#include "pipe/p_config.h" #define DEBUG_MEMORY_IMPLEMENTATION @@ -40,12 +40,12 @@ #include "os/os_memory_debug.h" #include "os/os_thread.h" -#include "util/u_debug.h" -#include "util/u_debug_stack.h" +#include "util/u_debug.h" +#include "util/u_debug_stack.h" #include "util/list.h" -#define DEBUG_MEMORY_MAGIC 0x6e34090aU +#define DEBUG_MEMORY_MAGIC 0x6e34090aU #define DEBUG_MEMORY_STACK 0 /* XXX: disabled until we have symbol lookup */ /** @@ -59,10 +59,10 @@ #define DEBUG_FREED_BYTE 0x33 -struct debug_memory_header +struct debug_memory_header { struct list_head head; - + unsigned long no; const char *file; unsigned line; @@ -95,7 +95,7 @@ static unsigned long last_no = 0; static inline struct debug_memory_header * header_from_data(void *data) { - if(data) + if (data) return (struct debug_memory_header *)((char *)data - sizeof(struct debug_memory_header)); else return NULL; @@ -104,7 +104,7 @@ header_from_data(void *data) static inline void * data_from_header(struct debug_memory_header *hdr) { - if(hdr) + if (hdr) return (void *)((char *)hdr + sizeof(struct debug_memory_header)); else return NULL; @@ -113,7 +113,7 @@ data_from_header(struct debug_memory_header *hdr) static inline struct debug_memory_footer * footer_from_header(struct debug_memory_header *hdr) { - if(hdr) + if (hdr) return (struct debug_memory_footer *)((char *)hdr + sizeof(struct debug_memory_header) + hdr->size); else return NULL; @@ -122,11 +122,11 @@ footer_from_header(struct debug_memory_header *hdr) void * debug_malloc(const char *file, unsigned line, const char *function, - size_t size) + size_t size) { struct debug_memory_header *hdr; struct debug_memory_footer *ftr; - + hdr = os_malloc(sizeof(*hdr) + size + sizeof(*ftr)); if (!hdr) { debug_printf("%s:%u:%s: out of memory when trying to allocate %lu bytes\n", @@ -134,7 +134,7 @@ debug_malloc(const char *file, unsigned line, const char *function, (long unsigned)size); return NULL; } - + hdr->no = last_no++; hdr->file = file; hdr->line = line; @@ -152,26 +152,26 @@ debug_malloc(const char *file, unsigned line, const char *function, ftr = footer_from_header(hdr); ftr->magic = DEBUG_MEMORY_MAGIC; - + mtx_lock(&list_mutex); LIST_ADDTAIL(&hdr->head, &list); mtx_unlock(&list_mutex); - + return data_from_header(hdr); } void debug_free(const char *file, unsigned line, const char *function, - void *ptr) + void *ptr) { struct debug_memory_header *hdr; struct debug_memory_footer *ftr; - + if (!ptr) return; - + hdr = header_from_data(ptr); - if(hdr->magic != DEBUG_MEMORY_MAGIC) { + if (hdr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s:%u:%s: freeing bad or corrupted memory %p\n", file, line, function, ptr); @@ -180,7 +180,7 @@ debug_free(const char *file, unsigned line, const char *function, } ftr = footer_from_header(hdr); - if(ftr->magic != DEBUG_MEMORY_MAGIC) { + if (ftr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s:%u:%s: buffer overflow %p\n", hdr->file, hdr->line, hdr->function, ptr); @@ -203,7 +203,7 @@ debug_free(const char *file, unsigned line, const char *function, mtx_unlock(&list_mutex); hdr->magic = 0; ftr->magic = 0; - + os_free(hdr); #endif } @@ -225,26 +225,26 @@ debug_realloc(const char *file, unsigned line, const char *function, struct debug_memory_header *old_hdr, *new_hdr; struct debug_memory_footer *old_ftr, *new_ftr; void *new_ptr; - + if (!old_ptr) return debug_malloc( file, line, function, new_size ); - - if(!new_size) { + + if (!new_size) { debug_free( file, line, function, old_ptr ); return NULL; } - + old_hdr = header_from_data(old_ptr); - if(old_hdr->magic != DEBUG_MEMORY_MAGIC) { + if (old_hdr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s:%u:%s: reallocating bad or corrupted memory %p\n", file, line, function, old_ptr); debug_assert(0); return NULL; } - + old_ftr = footer_from_header(old_hdr); - if(old_ftr->magic != DEBUG_MEMORY_MAGIC) { + if (old_ftr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s:%u:%s: buffer overflow %p\n", old_hdr->file, old_hdr->line, old_hdr->function, old_ptr); @@ -269,10 +269,10 @@ debug_realloc(const char *file, unsigned line, const char *function, #if DEBUG_FREED_MEMORY new_hdr->freed = FALSE; #endif - + new_ftr = footer_from_header(new_hdr); new_ftr->magic = DEBUG_MEMORY_MAGIC; - + mtx_lock(&list_mutex); LIST_REPLACE(&old_hdr->head, &new_hdr->head); mtx_unlock(&list_mutex); @@ -295,13 +295,13 @@ debug_memory_begin(void) return last_no; } -void +void debug_memory_end(unsigned long start_no) { size_t total_size = 0; struct list_head *entry; - if(start_no == last_no) + if (start_no == last_no) return; entry = list.prev; @@ -314,25 +314,25 @@ debug_memory_end(unsigned long start_no) ptr = data_from_header(hdr); ftr = footer_from_header(hdr); - if(hdr->magic != DEBUG_MEMORY_MAGIC) { + if (hdr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s:%u:%s: bad or corrupted memory %p\n", hdr->file, hdr->line, hdr->function, ptr); debug_assert(0); } - if((start_no <= hdr->no && hdr->no < last_no) || - (last_no < start_no && (hdr->no < last_no || start_no <= hdr->no))) { - debug_printf("%s:%u:%s: %lu bytes at %p not freed\n", - hdr->file, hdr->line, hdr->function, - (unsigned long) hdr->size, ptr); + if ((start_no <= hdr->no && hdr->no < last_no) || + (last_no < start_no && (hdr->no < last_no || start_no <= hdr->no))) { + debug_printf("%s:%u:%s: %lu bytes at %p not freed\n", + hdr->file, hdr->line, hdr->function, + (unsigned long) hdr->size, ptr); #if DEBUG_MEMORY_STACK - debug_backtrace_dump(hdr->backtrace, DEBUG_MEMORY_STACK); + debug_backtrace_dump(hdr->backtrace, DEBUG_MEMORY_STACK); #endif - total_size += hdr->size; + total_size += hdr->size; } - if(ftr->magic != DEBUG_MEMORY_MAGIC) { + if (ftr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s:%u:%s: buffer overflow %p\n", hdr->file, hdr->line, hdr->function, ptr); @@ -340,9 +340,9 @@ debug_memory_end(unsigned long start_no) } } - if(total_size) { + if (total_size) { debug_printf("Total of %lu KB of system memory apparently leaked\n", - (unsigned long) (total_size + 1023)/1024); + (unsigned long) (total_size + 1023)/1024); } else { debug_printf("No memory leaks detected.\n"); @@ -358,10 +358,10 @@ void debug_memory_tag(void *ptr, unsigned tag) { struct debug_memory_header *hdr; - + if (!ptr) return; - + hdr = header_from_data(ptr); if (hdr->magic != DEBUG_MEMORY_MAGIC) { debug_printf("%s corrupted memory at %p\n", __FUNCTION__, ptr); @@ -380,10 +380,10 @@ debug_memory_check_block(void *ptr) { struct debug_memory_header *hdr; struct debug_memory_footer *ftr; - + if (!ptr) return; - + hdr = header_from_data(ptr); ftr = footer_from_header(hdr); @@ -406,7 +406,7 @@ debug_memory_check_block(void *ptr) * We can periodically call this from elsewhere to do a basic sanity * check of the heap memory we've allocated. */ -void +void debug_memory_check(void) { struct list_head *entry; |