From 0c6929858665ae0e9918fe0c6c71ce26fd4a4461 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Fri, 24 Jul 2009 14:59:56 +0000 Subject: [PATCH] free the gc_thread structures during shutdown --- rts/sm/GC.c | 17 +++++++++++++++++ rts/sm/GC.h | 1 + rts/sm/Storage.c | 1 + 3 files changed, 19 insertions(+) diff --git a/rts/sm/GC.c b/rts/sm/GC.c index 7488006..88b11aa 100644 --- a/rts/sm/GC.c +++ b/rts/sm/GC.c @@ -937,6 +937,23 @@ initGcThreads (void) } } +void +freeGcThreads (void) +{ + if (gc_threads != NULL) { +#if defined(THREADED_RTS) + nat i; + for (i = 0; i < RtsFlags.ParFlags.nNodes; i++) { + stgFree (gc_threads[i]); + } + stgFree (gc_threads); +#else + stgFree (gc_threads); +#endif + gc_threads = NULL; + } +} + /* ---------------------------------------------------------------------------- Start GC threads ------------------------------------------------------------------------- */ diff --git a/rts/sm/GC.h b/rts/sm/GC.h index fb6e385..fb4381d 100644 --- a/rts/sm/GC.h +++ b/rts/sm/GC.h @@ -44,6 +44,7 @@ extern StgWord64 whitehole_spin; void gcWorkerThread (Capability *cap); void initGcThreads (void); +void freeGcThreads (void); void waitForGcThreads (Capability *cap); void releaseGCThreads (Capability *cap); diff --git a/rts/sm/Storage.c b/rts/sm/Storage.c index 9320232..d14e588 100644 --- a/rts/sm/Storage.c +++ b/rts/sm/Storage.c @@ -284,6 +284,7 @@ freeStorage (void) closeMutex(&sm_mutex); #endif stgFree(nurseries); + freeGcThreads(); } /* ----------------------------------------------------------------------------- -- 1.7.10.4