summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunyan He <junyan.he@intel.com>2016-04-21 12:42:40 +0800
committerJunyan He <junyan.he@intel.com>2016-04-21 12:42:40 +0800
commite0c0f08b5f8a44e6af8152394ed42191db95ed8c (patch)
tree81b2b42dcfd4b21bb82b1a14673d6aa28f2266f1
parent6ecce2f7c138347b4b81b01c52f56dbf7597743b (diff)
report
-rw-r--r--libclapi/cl_alloc.c41
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);
}