projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move the freeing of Capabilities later in the shutdown sequence
[ghc-hetmet.git]
/
rts
/
Capability.c
diff --git
a/rts/Capability.c
b/rts/Capability.c
index
92396e9
..
c810311
100644
(file)
--- 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);
}
debugTrace(DEBUG_sched, "capability %d is stopped.", cap->no);
- freeCapability(cap);
RELEASE_LOCK(&cap->lock);
break;
}
RELEASE_LOCK(&cap->lock);
break;
}
@@
-805,14
+804,28
@@
tryGrabCapability (Capability *cap, Task *task)
#endif /* THREADED_RTS */
#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
}
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
/* ---------------------------------------------------------------------------
Mark everything directly reachable from the Capabilities. When
using multiple GC threads, each GC thread marks all Capabilities