Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/d63ba79a6dde7a5616d3b532589ff09d3820f794

>---------------------------------------------------------------

commit d63ba79a6dde7a5616d3b532589ff09d3820f794
Author: Simon Marlow <[email protected]>
Date:   Fri Aug 20 09:31:33 2010 +0000

    fix some shutdown memory leaks

>---------------------------------------------------------------

 rts/sm/MBlock.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/rts/sm/MBlock.c b/rts/sm/MBlock.c
index 5317275..b9d71f6 100644
--- 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++;
-       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] = 
-            stgMallocBytes(sizeof(MBlockMap),"markHeapAlloced");
+            stgMallocBytes(sizeof(MBlockMap),"markHeapAlloced(2)");
         memset(map,0,sizeof(MBlockMap));
        map->addrHigh32 = (StgWord32) (((StgWord)p) >> 32);
     }
@@ -264,8 +265,16 @@ freeMBlocks(void *addr, nat n)
 void
 freeAllMBlocks(void)
 {
+    nat n;
+
     debugTrace(DEBUG_gc, "freeing all megablocks");
+
     osFreeAllMBlocks();
+
+    for (n = 0; n < mblock_map_count; n++) {
+        stgFree(mblock_maps[n]);
+    }
+    stgFree(mblock_maps);
 }
 
 void



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to