X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FStable.c;h=e5e8dfbdd0fad046a7944d680e2c929c9c2fe7f0;hp=a4db5cd749de174afa28a9a89b2b8d8d35fe8ed0;hb=8a2809c29de9f23eba7ca682b48390033a9d40f6;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1 diff --git a/rts/Stable.c b/rts/Stable.c index a4db5cd..e5e8dfb 100644 --- a/rts/Stable.c +++ b/rts/Stable.c @@ -18,6 +18,8 @@ #include "RtsAPI.h" #include "RtsFlags.h" #include "OSThreads.h" +#include "Trace.h" +#include "Stable.h" /* Comment from ADR's implementation in old RTS: @@ -158,6 +160,21 @@ initStablePtrTable(void) #endif } +void +exitStablePtrTable(void) +{ + if (addrToStableHash) + freeHashTable(addrToStableHash, NULL); + addrToStableHash = NULL; + if (stable_ptr_table) + stgFree(stable_ptr_table); + stable_ptr_table = NULL; + SPT_size = 0; +#ifdef THREADED_RTS + closeMutex(&stable_mutex); +#endif +} + /* * get at the real stuff...remove indirections. * @@ -199,7 +216,7 @@ lookupStableName_(StgPtr p) if (sn != 0) { ASSERT(stable_ptr_table[sn].addr == p); - IF_DEBUG(stable,debugBelch("cached stable name %ld at %p\n",sn,p)); + debugTrace(DEBUG_stable, "cached stable name %ld at %p",sn,p); return sn; } else { sn = stable_ptr_free - stable_ptr_table; @@ -207,7 +224,7 @@ lookupStableName_(StgPtr p) stable_ptr_table[sn].ref = 0; stable_ptr_table[sn].addr = p; stable_ptr_table[sn].sn_obj = NULL; - /* IF_DEBUG(stable,debugBelch("new stable name %d at %p\n",sn,p)); */ + /* debugTrace(DEBUG_stable, "new stable name %d at %p\n",sn,p); */ /* add the new stable name to the hash table */ insertHashTable(addrToStableHash, (W_)p, (void *)sn); @@ -399,13 +416,15 @@ gcStablePtrTable( void ) if (p->sn_obj == NULL) { // StableName object is dead freeStableName(p); - IF_DEBUG(stable, debugBelch("GC'd Stable name %ld\n", - p - stable_ptr_table)); + debugTrace(DEBUG_stable, "GC'd Stable name %ld", + (long)(p - stable_ptr_table)); continue; } else { p->addr = (StgPtr)isAlive((StgClosure *)p->addr); - IF_DEBUG(stable, debugBelch("Stable name %ld still alive at %p, ref %ld\n", p - stable_ptr_table, p->addr, p->ref)); + debugTrace(DEBUG_stable, + "stable name %ld still alive at %p, ref %ld\n", + (long)(p - stable_ptr_table), p->addr, p->ref); } } }