diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/mem-pool.c | 34 | ||||
-rw-r--r-- | libglusterfs/src/mem-pool.h | 6 | ||||
-rw-r--r-- | libglusterfs/src/xlator.c | 3 |
3 files changed, 42 insertions, 1 deletions
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c index a972f67bb17..252bae5d7e3 100644 --- a/libglusterfs/src/mem-pool.c +++ b/libglusterfs/src/mem-pool.c @@ -78,8 +78,16 @@ gf_mem_set_acct_info (xlator_t *xl, char **alloc_ptr, size_t size, header->mem_acct = xl->mem_acct; header->magic = GF_MEM_HEADER_MAGIC; +#ifdef DEBUG + INIT_LIST_HEAD(&header->acct_list); + LOCK(&xl->mem_acct->rec[type].lock); + { + list_add (&header->acct_list, + &(xl->mem_acct->rec[type].obj_list)); + } + UNLOCK(&xl->mem_acct->rec[type].lock); +#endif ptr += sizeof (struct mem_header); - /* data follows in this gap of 'size' bytes */ *(uint32_t *) (ptr + size) = GF_MEM_TRAILER_MAGIC; @@ -157,6 +165,27 @@ __gf_realloc (void *ptr, size_t size) GF_ASSERT (old_header->magic == GF_MEM_HEADER_MAGIC); tmp_header = *old_header; +#ifdef DEBUG + int type = 0; + size_t copy_size = 0; + + /* Making these changes for realloc is not straightforward. So + * I am simulating realloc using calloc and free + */ + + type = tmp_header.type; + new_ptr = __gf_calloc (1, size, type, + tmp_header.mem_acct->rec[type].typestr); + if (new_ptr) { + copy_size = (size > tmp_header.size) ? tmp_header.size : size; + memcpy (new_ptr, ptr, copy_size); + __gf_free (ptr); + } + + /* This is not quite what the man page says should happen */ + return new_ptr; +#endif + tot_size = size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE; new_ptr = realloc (old_header, tot_size); if (!new_ptr) { @@ -313,6 +342,9 @@ __gf_free (void *free_ptr) * to NULL */ if (!mem_acct->rec[header->type].num_allocs) mem_acct->rec[header->type].typestr = NULL; +#ifdef DEBUG + list_del (&header->acct_list); +#endif } UNLOCK (&mem_acct->rec[header->type].lock); diff --git a/libglusterfs/src/mem-pool.h b/libglusterfs/src/mem-pool.h index e68e00dfca1..a2a907a2344 100644 --- a/libglusterfs/src/mem-pool.h +++ b/libglusterfs/src/mem-pool.h @@ -46,6 +46,9 @@ struct mem_acct_rec { uint32_t total_allocs; uint32_t max_num_allocs; gf_lock_t lock; +#ifdef DEBUG + struct list_head obj_list; +#endif }; struct mem_acct { @@ -59,6 +62,9 @@ struct mem_header { size_t size; struct mem_acct *mem_acct; uint32_t magic; +#ifdef DEBUG + struct list_head acct_list; +#endif int padding[8]; }; diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index a342bbd7f33..3e9814ca19b 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -802,6 +802,9 @@ xlator_mem_acct_init (xlator_t *xl, int num_types) if (ret) { fprintf(stderr, "Unable to lock..errno : %d",errno); } +#ifdef DEBUG + INIT_LIST_HEAD(&(xl->mem_acct->rec[i].obj_list)); +#endif } return 0; |