projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
do a bit of by-hand CSE
[ghc-hetmet.git]
/
rts
/
sm
/
MBlock.c
diff --git
a/rts/sm/MBlock.c
b/rts/sm/MBlock.c
index
5317275
..
1801086
100644
(file)
--- a/
rts/sm/MBlock.c
+++ b/
rts/sm/MBlock.c
@@
-88,10
+88,11
@@
setHeapAlloced(void *p, StgWord8 i)
if(map == NULL)
{
mblock_map_count++;
if(map == NULL)
{
mblock_map_count++;
- mblock_maps = realloc(mblock_maps,
- sizeof(MBlockMap*) * mblock_map_count);
+ mblock_maps = stgReallocBytes(mblock_maps,
+ sizeof(MBlockMap*) * mblock_map_count,
+ "markHeapAlloced(1)");
map = mblock_maps[mblock_map_count-1] =
map = mblock_maps[mblock_map_count-1] =
- stgMallocBytes(sizeof(MBlockMap),"markHeapAlloced");
+ stgMallocBytes(sizeof(MBlockMap),"markHeapAlloced(2)");
memset(map,0,sizeof(MBlockMap));
map->addrHigh32 = (StgWord32) (((StgWord)p) >> 32);
}
memset(map,0,sizeof(MBlockMap));
map->addrHigh32 = (StgWord32) (((StgWord)p) >> 32);
}
@@
-265,7
+266,16
@@
void
freeAllMBlocks(void)
{
debugTrace(DEBUG_gc, "freeing all megablocks");
freeAllMBlocks(void)
{
debugTrace(DEBUG_gc, "freeing all megablocks");
+
osFreeAllMBlocks();
osFreeAllMBlocks();
+
+#if SIZEOF_VOID_P == 8
+ nat n;
+ for (n = 0; n < mblock_map_count; n++) {
+ stgFree(mblock_maps[n]);
+ }
+ stgFree(mblock_maps);
+#endif
}
void
}
void