From: Martin Quinson Date: Thu, 2 Feb 2012 16:20:50 +0000 (+0100) Subject: document one more function X-Git-Tag: exp_20120216~80 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/8ed41a8d8b27bd21b00a4c24af81eecb4637fa1a document one more function --- diff --git a/src/xbt/mmalloc/mmalloc.c b/src/xbt/mmalloc/mmalloc.c index 82876e5b27..355b24c1a3 100644 --- a/src/xbt/mmalloc/mmalloc.c +++ b/src/xbt/mmalloc/mmalloc.c @@ -76,26 +76,25 @@ static void *register_morecore(struct mdesc *mdp, size_t size) return (NULL); } - /* Check if we need to grow the info table. */ + /* Check if we need to grow the info table (in a multiplicative manner) */ if ((size_t) BLOCK((char *) result + size) > mdp->heapsize) { + newsize = mdp->heapsize; - while ((size_t) BLOCK((char *) result + size) > newsize) { + while ((size_t) BLOCK((char *) result + size) > newsize) newsize *= 2; - } - newinfo = (malloc_info *) align(mdp, newsize * sizeof(malloc_info)); - if (newinfo == NULL) { - mmorecore(mdp, -size); - return (NULL); - } - memset((void *) newinfo, 0, newsize * sizeof(malloc_info)); - memcpy((void *) newinfo, (void *) mdp->heapinfo, - mdp->heapsize * sizeof(malloc_info)); + + /* Copy old info into new location */ oldinfo = mdp->heapinfo; + newinfo = (malloc_info *) align(mdp, newsize * sizeof(malloc_info)); + memset(newinfo, 0, newsize * sizeof(malloc_info)); + memcpy(newinfo, oldinfo, mdp->heapsize * sizeof(malloc_info)); + mdp->heapinfo = newinfo; + + /* mark the space previously occupied by the block info as free by first marking it + * as occupied in the regular way, and then freing it */ newinfo[BLOCK(oldinfo)].busy.type = 0; - newinfo[BLOCK(oldinfo)].busy.info.block.size - = BLOCKIFY(mdp->heapsize * sizeof(malloc_info)); + newinfo[BLOCK(oldinfo)].busy.info.block.size = BLOCKIFY(mdp->heapsize * sizeof(malloc_info)); newinfo[BLOCK(oldinfo)].busy.info.block.busy_size = size; - mdp->heapinfo = newinfo; __mmalloc_free(mdp, (void *) oldinfo); mdp->heapsize = newsize; }