From 2b091a6c5352ef2e745e879920f48f27567ec1e8 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 9 Dec 2010 16:39:19 +0000 Subject: [PATCH] fix another sanity error, and refactor/tidy up --- rts/sm/BlockAlloc.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/rts/sm/BlockAlloc.c b/rts/sm/BlockAlloc.c index 429ebd0..75c8832 100644 --- a/rts/sm/BlockAlloc.c +++ b/rts/sm/BlockAlloc.c @@ -332,10 +332,7 @@ allocGroup (nat n) bd = alloc_mega_group(mblocks); // only the bdescrs of the first MB are required to be initialised initGroup(bd); - - IF_DEBUG(sanity,memset(bd->start, 0xaa, bd->blocks * BLOCK_SIZE)); - IF_DEBUG(sanity, checkFreeListSanity()); - return bd; + goto finish; } n_alloc_blocks += n; @@ -364,8 +361,7 @@ allocGroup (nat n) initGroup(rem); // init the slop n_alloc_blocks += rem->blocks; freeGroup(rem); // add the slop on to the free list - IF_DEBUG(sanity, checkFreeListSanity()); - return bd; + goto finish; } bd = free_list[ln]; @@ -373,19 +369,22 @@ allocGroup (nat n) if (bd->blocks == n) // exactly the right size! { dbl_link_remove(bd, &free_list[ln]); + initGroup(bd); } else if (bd->blocks > n) // block too big... { bd = split_free_block(bd, n, ln); + ASSERT(bd->blocks == n); + initGroup(bd); } else { barf("allocGroup: free list corrupted"); } - initGroup(bd); // initialise it - IF_DEBUG(sanity,memset(bd->start, 0xaa, bd->blocks * BLOCK_SIZE)); + +finish: + IF_DEBUG(sanity, memset(bd->start, 0xaa, bd->blocks * BLOCK_SIZE)); IF_DEBUG(sanity, checkFreeListSanity()); - ASSERT(bd->blocks == n); return bd; } -- 1.7.10.4