diff options
author | Junyan He <junyan.he@intel.com> | 2016-04-21 12:42:40 +0800 |
---|---|---|
committer | Junyan He <junyan.he@intel.com> | 2016-04-21 12:42:40 +0800 |
commit | e0c0f08b5f8a44e6af8152394ed42191db95ed8c (patch) | |
tree | 81b2b42dcfd4b21bb82b1a14673d6aa28f2266f1 | |
parent | 6ecce2f7c138347b4b81b01c52f56dbf7597743b (diff) |
report
-rw-r--r-- | libclapi/cl_alloc.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/libclapi/cl_alloc.c b/libclapi/cl_alloc.c index be6b23aa..ef68fe62 100644 --- a/libclapi/cl_alloc.c +++ b/libclapi/cl_alloc.c @@ -24,6 +24,7 @@ #include "cl_internals.h" static pthread_mutex_t cl_alloc_log_lock; +static unsigned int cl_alloc_log_num; typedef struct _cl_alloc_log_item { void* ptr; @@ -50,6 +51,7 @@ LOCAL void cl_alloc_debug_init(void) cl_alloc_log_map[i] = malloc(cl_alloc_log_map_size[i]*sizeof(cl_alloc_log_item)); memset(cl_alloc_log_map[i], 0, cl_alloc_log_map_size[i]*sizeof(cl_alloc_log_item)); } + cl_alloc_log_num = 0; inited = 1; } @@ -86,6 +88,7 @@ static void insert_alloc_log_item(void* ptr, size_t sz, char* file, int line) } cl_alloc_log_map[slot][i] = it; + cl_alloc_log_num++; pthread_mutex_unlock(&cl_alloc_log_lock); } @@ -114,6 +117,7 @@ static void delete_alloc_log_item(void* ptr, char* file, int line) free(cl_alloc_log_map[slot][i]); cl_alloc_log_map[slot][i] = NULL; + cl_alloc_log_num--; pthread_mutex_unlock(&cl_alloc_log_lock); } @@ -125,8 +129,7 @@ LOCAL void* cl_malloc(size_t sz, char* file, int line) return p; } -LOCAL void* -cl_aligned_malloc(size_t sz, size_t align, char* file, int line) +LOCAL void* cl_aligned_malloc(size_t sz, size_t align, char* file, int line) { void * p = NULL; p = memalign(align, sz); @@ -135,8 +138,7 @@ cl_aligned_malloc(size_t sz, size_t align, char* file, int line) return p; } -LOCAL void* -cl_calloc(size_t n, size_t elem_size, char* file, int line) +LOCAL void* cl_calloc(size_t n, size_t elem_size, char* file, int line) { void *p = NULL; p = calloc(n, elem_size); @@ -145,8 +147,7 @@ cl_calloc(size_t n, size_t elem_size, char* file, int line) return p; } -LOCAL void* -cl_realloc(void *ptr, size_t sz, char* file, int line) +LOCAL void* cl_realloc(void *ptr, size_t sz, char* file, int line) { void *p = NULL; @@ -160,8 +161,7 @@ cl_realloc(void *ptr, size_t sz, char* file, int line) return p; } -LOCAL void -cl_free(void *ptr, char* file, int line) +LOCAL void cl_free(void *ptr, char* file, int line) { if (ptr == NULL) return; @@ -170,8 +170,29 @@ cl_free(void *ptr, char* file, int line) free(ptr); } -LOCAL void -cl_alloc_report_unfreed(void) +void cl_alloc_report_unfreed(void) { + int i, slot, num; + pthread_mutex_lock(&cl_alloc_log_lock); + if (cl_alloc_log_num == 0) { + pthread_mutex_unlock(&cl_alloc_log_lock); + return; + } + + printf("-------------------------------------------------------------------\n"); + num = 0; + for (slot = 0; slot < 8; slot++) { + for (i = 0; i < cl_alloc_log_map_size[slot]; i++) { + if (cl_alloc_log_map[slot][i]) { + printf("Leak point at file:%s, line: %d, ptr is %p, alloc size is %ld\n", + cl_alloc_log_map[slot][i]->file, cl_alloc_log_map[slot][i]->line, + cl_alloc_log_map[slot][i]->ptr, cl_alloc_log_map[slot][i]->size); + num++; + } + } + } + printf("-------------------------------------------------------------------\n"); + assert(num == cl_alloc_log_num); + pthread_mutex_unlock(&cl_alloc_log_lock); } |