projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
03edcb5
)
fix another sanity error, and refactor/tidy up
author
Simon Marlow
<marlowsd@gmail.com>
Thu, 9 Dec 2010 16:39:19 +0000
(16:39 +0000)
committer
Simon Marlow
<marlowsd@gmail.com>
Thu, 9 Dec 2010 16:39:19 +0000
(16:39 +0000)
rts/sm/BlockAlloc.c
patch
|
blob
|
history
diff --git
a/rts/sm/BlockAlloc.c
b/rts/sm/BlockAlloc.c
index
429ebd0
..
75c8832
100644
(file)
--- 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);
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;
}
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
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];
}
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]);
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);
}
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");
}
}
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());
IF_DEBUG(sanity, checkFreeListSanity());
- ASSERT(bd->blocks == n);
return bd;
}
return bd;
}