continue;
}
debugTrace(DEBUG_sched, "capability %d is stopped.", cap->no);
+ stgFree(cap->mut_lists);
+ freeSparkPool(&cap->r.rSparks);
RELEASE_LOCK(&cap->lock);
break;
}
/* 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();
#endif
}
+void
+freeSparkPool(StgSparkPool *pool) {
+ stgFree(pool->base);
+}
+
/* -----------------------------------------------------------------------------
*
* findSpark: find a spark on the current Capability that we can fork
#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);
}
void
+freeThreadLabelTable(void)
+{
+ if (threadLabels != NULL) {
+ freeHashTable(threadLabels, NULL);
+ threadLabels = NULL;
+ }
+}
+
+void
updateThreadLabel(StgWord key, void *data)
{
removeThreadLabel(key);
#if defined(DEBUG)
void initThreadLabelTable (void);
+void freeThreadLabelTable (void);
void updateThreadLabel (StgWord key, void *data);
void * lookupThreadLabel (StgWord key);
void removeThreadLabel (StgWord key);
#if defined(THREADED_RTS)
closeMutex(&sm_mutex);
closeMutex(&atomic_modify_mutvar_mutex);
+ stgFree(nurseries);
#endif
}