size_t mmalloc_get_chunks_used(xbt_mheap_t);
+void remove_ignore_heap(void *address, size_t size);
+
#endif /* MMALLOC_H */
/****************************** MC ignore **********************************/
XBT_PUBLIC(void) MC_ignore_heap(void *address, size_t size);
-XBT_PUBLIC(void) MC_remove_ignore_heap(void *address, size_t size);
XBT_PUBLIC(void) MC_ignore_stack(const char *var_name, const char *frame);
XBT_PUBLIC(void) MC_ignore_data_bss(void *address, size_t size);
void MC_new_stack_area(void *stack, char *name, void *context, size_t size);
MC_SET_RAW_MEM;
}
-
-
-void MC_remove_ignore_heap(void *address, size_t size){
-
- int raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
-
- MC_SET_RAW_MEM;
-
- 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;
- }
- }
-
- if(ignore_found == 1){
- xbt_dynar_remove_at(mc_heap_comparison_ignore, cursor, NULL);
- MC_remove_ignore_heap(address, size);
- }
-
- MC_UNSET_RAW_MEM;
-
- if(raw_mem_set)
- MC_SET_RAW_MEM;
-}
-
void MC_ignore_data_bss(void *address, size_t size){
int raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
mdp -> heapinfo[block].busy_block.size * BLOCKSIZE;
if(mdp->heapinfo[block].busy_block.ignore == 1)
- MC_remove_ignore_heap(ptr, mdp -> heapinfo[block].busy_block.busy_size);
+ remove_ignore_heap(ptr, mdp -> heapinfo[block].busy_block.busy_size);
/* Find the free cluster previous to this one in the free list.
Start searching at the last block referenced; this may benefit
}
if(mdp->heapinfo[block].busy_frag.ignore[frag_nb] == 1)
- MC_remove_ignore_heap(ptr, mdp->heapinfo[block].busy_frag.frag_size[frag_nb]);
+ remove_ignore_heap(ptr, mdp->heapinfo[block].busy_frag.frag_size[frag_nb]);
/* Set size used in the fragment to -1 */
mdp->heapinfo[block].busy_frag.frag_size[frag_nb] = -1;
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){
+
+ 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;
+ }
+ }
+
+ if(ignore_found == 1){
+ xbt_dynar_remove_at(mc_heap_comparison_ignore, cursor, NULL);
+ remove_ignore_heap(address, size);
+ }
+
+}