X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FBlockAlloc.c;fp=rts%2Fsm%2FBlockAlloc.c;h=3c12e19dfcffa7e844c8bf9f596038c2353f95c6;hb=01e06bc40a34e0e2d5e3846ac332eb287ecd21cb;hp=98afdd4caf8da6ce349ea59822d8e68e28d17ee4;hpb=bc111b7d3d03e49f999bd869cbac0ad5e2160b9b;p=ghc-hetmet.git diff --git a/rts/sm/BlockAlloc.c b/rts/sm/BlockAlloc.c index 98afdd4..3c12e19 100644 --- a/rts/sm/BlockAlloc.c +++ b/rts/sm/BlockAlloc.c @@ -155,19 +155,18 @@ void initBlockAllocator(void) -------------------------------------------------------------------------- */ STATIC_INLINE void -initGroup(nat n, bdescr *head) +initGroup(bdescr *head) { bdescr *bd; - nat i; + nat i, n; - if (n != 0) { - head->free = head->start; - head->link = NULL; - for (i=1, bd = head+1; i < n; i++, bd++) { + n = head->blocks; + head->free = head->start; + head->link = NULL; + for (i=1, bd = head+1; i < n; i++, bd++) { bd->free = 0; bd->blocks = 0; bd->link = head; - } } } @@ -269,7 +268,7 @@ alloc_mega_group (nat mblocks) } else { free_mblock_list = bd->link; } - initGroup(n, bd); + initGroup(bd); return bd; } else if (bd->blocks > n) @@ -319,7 +318,7 @@ allocGroup (nat n) { bd = alloc_mega_group(BLOCKS_TO_MBLOCKS(n)); // only the bdescrs of the first MB are required to be initialised - initGroup(BLOCKS_PER_MBLOCK, bd); + initGroup(bd); IF_DEBUG(sanity, checkFreeListSanity()); return bd; } @@ -341,10 +340,10 @@ allocGroup (nat n) bd = alloc_mega_group(1); bd->blocks = n; - initGroup(n,bd); // we know the group will fit + initGroup(bd); // we know the group will fit rem = bd + n; rem->blocks = BLOCKS_PER_MBLOCK-n; - initGroup(BLOCKS_PER_MBLOCK-n, rem); // init the slop + initGroup(rem); // init the slop n_alloc_blocks += rem->blocks; freeGroup(rem); // add the slop on to the free list IF_DEBUG(sanity, checkFreeListSanity()); @@ -365,7 +364,7 @@ allocGroup (nat n) { barf("allocGroup: free list corrupted"); } - initGroup(n, bd); // initialise it + initGroup(bd); // initialise it IF_DEBUG(sanity, checkFreeListSanity()); ASSERT(bd->blocks == n); return bd;