X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FCapability.c;h=c8103117c93a55a0bfe2d0796f4f813636bac224;hp=92396e9ef05d2d720d2648f42ee5fc2314cc88ba;hb=b7ea7671c442a0223f34593dc8a1182b15dde0bf;hpb=4af25e1a72f2d0f1f523fe5b13c71f1b3dc7a5a5 diff --git a/rts/Capability.c b/rts/Capability.c index 92396e9..c810311 100644 --- a/rts/Capability.c +++ b/rts/Capability.c @@ -767,7 +767,6 @@ shutdownCapability (Capability *cap, Task *task, rtsBool safe) } debugTrace(DEBUG_sched, "capability %d is stopped.", cap->no); - freeCapability(cap); RELEASE_LOCK(&cap->lock); break; } @@ -805,14 +804,28 @@ tryGrabCapability (Capability *cap, Task *task) #endif /* THREADED_RTS */ -void -freeCapability (Capability *cap) { +static void +freeCapability (Capability *cap) +{ stgFree(cap->mut_lists); #if defined(THREADED_RTS) || defined(PARALLEL_HASKELL) freeSparkPool(cap->sparks); #endif } +void +freeCapabilities (void) +{ +#if defined(THREADED_RTS) + nat i; + for (i=0; i < n_capabilities; i++) { + freeCapability(&capabilities[i]); + } +#else + freeCapability(&MainCapability); +#endif +} + /* --------------------------------------------------------------------------- Mark everything directly reachable from the Capabilities. When using multiple GC threads, each GC thread marks all Capabilities