- //printf("(%s) return excess memory...",xbt_thread_self_name());
- mdp->heapinfo[block + blocks].busy.type = 0;
- mdp->heapinfo[block + blocks].busy.info.block.size
- = mdp->heapinfo[block].busy.info.block.size - blocks;
- mdp->heapinfo[block].busy.info.block.size = blocks;
- mdp->heapinfo[block].busy.info.block.busy_size = size;
- mfree(md, ADDRESS(block + blocks));
+ for (size_t it = block + blocks; it < mdp->heapinfo[block].busy_block.size; it++) {
+ mdp->heapinfo[it].type = MMALLOC_TYPE_UNFRAGMENTED; // FIXME that should be useless, type should already be 0 here
+ mdp->heapinfo[it].busy_block.ignore = 0;
+ mdp->heapinfo[it].busy_block.size = 0;
+ mdp->heapinfo[it].busy_block.busy_size = 0;
+ }
+
+ mdp->heapinfo[block + blocks].busy_block.size = mdp->heapinfo[block].busy_block.size - blocks;
+ mfree(mdp, ADDRESS(block + blocks));
+
+ mdp->heapinfo[block].busy_block.size = blocks;
+ mdp->heapinfo[block].busy_block.busy_size = requested_size;
+ mdp->heapinfo[block].busy_block.ignore = 0;
+