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:
fa13a9b
)
fix some shutdown memory leaks
author
Simon Marlow
<marlowsd@gmail.com>
Fri, 20 Aug 2010 09:31:33 +0000
(09:31 +0000)
committer
Simon Marlow
<marlowsd@gmail.com>
Fri, 20 Aug 2010 09:31:33 +0000
(09:31 +0000)
rts/sm/MBlock.c
patch
|
blob
|
history
diff --git
a/rts/sm/MBlock.c
b/rts/sm/MBlock.c
index
5317275
..
b9d71f6
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);
}
@@
-264,8
+265,16
@@
freeMBlocks(void *addr, nat n)
void
freeAllMBlocks(void)
{
void
freeAllMBlocks(void)
{
+ nat n;
+
debugTrace(DEBUG_gc, "freeing all megablocks");
debugTrace(DEBUG_gc, "freeing all megablocks");
+
osFreeAllMBlocks();
osFreeAllMBlocks();
+
+ for (n = 0; n < mblock_map_count; n++) {
+ stgFree(mblock_maps[n]);
+ }
+ stgFree(mblock_maps);
}
void
}
void