From 221e74f6814f76430ff74b970a77393b0ae83eb5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 15 Dec 2006 13:45:07 +0000 Subject: [PATCH] Free various things we allocate --- rts/Capability.c | 2 ++ rts/RtsStartup.c | 7 ++++++- rts/Sparks.c | 5 +++++ rts/Sparks.h | 1 + rts/ThreadLabels.c | 9 +++++++++ rts/ThreadLabels.h | 1 + rts/sm/Storage.c | 1 + 7 files changed, 25 insertions(+), 1 deletion(-) diff --git a/rts/Capability.c b/rts/Capability.c index f1c625e..3d55b42 100644 --- a/rts/Capability.c +++ b/rts/Capability.c @@ -673,6 +673,8 @@ shutdownCapability (Capability *cap, Task *task) continue; } debugTrace(DEBUG_sched, "capability %d is stopped.", cap->no); + stgFree(cap->mut_lists); + freeSparkPool(&cap->r.rSparks); RELEASE_LOCK(&cap->lock); break; } diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 937334b..87df96a 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -444,9 +444,14 @@ hs_exit(void) /* free shared Typeable store */ exitTypeableStore(); - /* initialise the stable pointer table */ + /* free the stable pointer table */ exitStablePtrTable(); +#if defined(DEBUG) + /* free the thread label table */ + freeThreadLabelTable(); +#endif + /* free hash table storage */ exitHashTable(); diff --git a/rts/Sparks.c b/rts/Sparks.c index 40ebcad..ca60e13 100644 --- a/rts/Sparks.c +++ b/rts/Sparks.c @@ -63,6 +63,11 @@ initSparkPools( void ) #endif } +void +freeSparkPool(StgSparkPool *pool) { + stgFree(pool->base); +} + /* ----------------------------------------------------------------------------- * * findSpark: find a spark on the current Capability that we can fork diff --git a/rts/Sparks.h b/rts/Sparks.h index 65db52d..f2d3c6e 100644 --- a/rts/Sparks.h +++ b/rts/Sparks.h @@ -12,6 +12,7 @@ #if defined(PARALLEL_HASKELL) || defined(THREADED_RTS) StgClosure * findSpark (Capability *cap); void initSparkPools (void); +void freeSparkPool (StgSparkPool *pool); void markSparkQueue (evac_fn evac); void createSparkThread (Capability *cap, StgClosure *p); diff --git a/rts/ThreadLabels.c b/rts/ThreadLabels.c index 1c89d84..6919e1a 100644 --- a/rts/ThreadLabels.c +++ b/rts/ThreadLabels.c @@ -29,6 +29,15 @@ initThreadLabelTable(void) } void +freeThreadLabelTable(void) +{ + if (threadLabels != NULL) { + freeHashTable(threadLabels, NULL); + threadLabels = NULL; + } +} + +void updateThreadLabel(StgWord key, void *data) { removeThreadLabel(key); diff --git a/rts/ThreadLabels.h b/rts/ThreadLabels.h index eaed22d..59eb321 100644 --- a/rts/ThreadLabels.h +++ b/rts/ThreadLabels.h @@ -12,6 +12,7 @@ #if defined(DEBUG) void initThreadLabelTable (void); +void freeThreadLabelTable (void); void updateThreadLabel (StgWord key, void *data); void * lookupThreadLabel (StgWord key); void removeThreadLabel (StgWord key); diff --git a/rts/sm/Storage.c b/rts/sm/Storage.c index 1d08a85..6e862f2 100644 --- a/rts/sm/Storage.c +++ b/rts/sm/Storage.c @@ -287,6 +287,7 @@ freeStorage (void) #if defined(THREADED_RTS) closeMutex(&sm_mutex); closeMutex(&atomic_modify_mutvar_mutex); + stgFree(nurseries); #endif } -- 1.7.10.4