X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FMBlock.c;h=1801086c2a445a3a2be7acf2b2dce8ae6eded2d5;hb=feabe9933969905173d0abe94343d9355e3d8df6;hp=53172753f1f5ae7a5a8488323ebf3ac7281d9048;hpb=3fb074b5fcfd91fe0d37af83f221450ac4734908;p=ghc-hetmet.git diff --git a/rts/sm/MBlock.c b/rts/sm/MBlock.c index 5317275..1801086 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); } @@ -265,7 +266,16 @@ void freeAllMBlocks(void) { debugTrace(DEBUG_gc, "freeing all megablocks"); + 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