X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1fe09f54bac3c43710f19de37bcec99cd19b92a8..c128702f75d1981c4a082ae6e4630f614074ab6e:/src/xbt/mmalloc/mm_module.c diff --git a/src/xbt/mmalloc/mm_module.c b/src/xbt/mmalloc/mm_module.c index b31daac7be..01c0bce8c2 100644 --- a/src/xbt/mmalloc/mm_module.c +++ b/src/xbt/mmalloc/mm_module.c @@ -344,39 +344,37 @@ void mmalloc_postexit(void) xbt_mheap_destroy_no_free(__mmalloc_default_mdp); } -size_t mmalloc_get_chunks_used(xbt_mheap_t heap){ - return ((struct mdesc *)heap)->heapstats.chunks_used; -} - -void remove_ignore_heap(void *address, size_t size){ +size_t mmalloc_get_bytes_used(xbt_mheap_t heap){ + int i = 0, j = 0; + int bytes = 0; - unsigned int cursor = 0; - int start = 0; - int end = xbt_dynar_length(mc_heap_comparison_ignore) - 1; - mc_heap_ignore_region_t region; - int ignore_found = 0; - - while(start <= end){ - cursor = (start + end) / 2; - region = (mc_heap_ignore_region_t)xbt_dynar_get_as(mc_heap_comparison_ignore, cursor, mc_heap_ignore_region_t); - if(region->address == address){ - ignore_found = 1; - break; - } - if(region->address < address) - start = cursor + 1; - if(region->address > address){ - if((char * )region->address <= ((char *)address + size)){ - ignore_found = 1; - break; - }else - end = cursor - 1; + while(i<=((struct mdesc *)heap)->heaplimit){ + if(((struct mdesc *)heap)->heapinfo[i].type == 0){ + if(((struct mdesc *)heap)->heapinfo[i].busy_block.busy_size > 0) + bytes += ((struct mdesc *)heap)->heapinfo[i].busy_block.busy_size; + + }else if(((struct mdesc *)heap)->heapinfo[i].type > 0){ + for(j=0; j < (size_t) (BLOCKSIZE >> ((struct mdesc *)heap)->heapinfo[i].type); j++){ + if(((struct mdesc *)heap)->heapinfo[i].busy_frag.frag_size[j] > 0) + bytes += ((struct mdesc *)heap)->heapinfo[i].busy_frag.frag_size[j]; + } } + i++; } - - if(ignore_found == 1){ - xbt_dynar_remove_at(mc_heap_comparison_ignore, cursor, NULL); - remove_ignore_heap(address, size); - } + return bytes; +} + +ssize_t mmalloc_get_busy_size(xbt_mheap_t heap, void *ptr){ + + ssize_t block = ((char*)ptr - (char*)(heap->heapbase)) / BLOCKSIZE + 1; + if(heap->heapinfo[block].type == -1) + return -1; + else if(heap->heapinfo[block].type == 0) + return heap->heapinfo[block].busy_block.busy_size; + else{ + ssize_t frag = ((uintptr_t) (ADDR2UINT (ptr) % (BLOCKSIZE))) >> heap->heapinfo[block].type; + return heap->heapinfo[block].busy_frag.frag_size[frag]; + } + }