summaryrefslogtreecommitdiff
path: root/rts/sm/Compact.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-03-02 10:53:34 +0000
committerSimon Marlow <marlowsd@gmail.com>2012-03-02 11:44:17 +0000
commit085c7fe5d4ea6e7b59f944d46ecfeba3755a315b (patch)
tree3de7e3e6306dbf9a8869862266a35a2d0d75d11f /rts/sm/Compact.c
parent27d7d930ff8741f980245da1b895ceaa5294e257 (diff)
downloadhaskell-085c7fe5d4ea6e7b59f944d46ecfeba3755a315b.tar.gz
Drop the per-task timing stats, give a summary only (#5897)
We were keeping around the Task struct (216 bytes) for every worker we ever created, even though we only keep a maximum of 6 workers per Capability. These Task structs accumulate and cause a space leak in programs that do lots of safe FFI calls; this patch frees the Task struct as soon as a worker exits. One reason we were keeping the Task structs around is because we print out per-Task timing stats in +RTS -s, but that isn't terribly useful. What is sometimes useful is knowing how *many* Tasks there were. So now I'm printing a single-line summary, this is for the program in TASKS: 2001 (1 bound, 31 peak workers (2000 total), using -N1) So although we created 2k tasks overall, there were only 31 workers active at any one time (which is exactly what we expect: the program makes 30 safe FFI calls concurrently). This also gives an indication of how many capabilities were being used, which is handy if you use +RTS -N without an explicit number.
Diffstat (limited to 'rts/sm/Compact.c')
-rw-r--r--rts/sm/Compact.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c
index 4f71026dfa..987f78b497 100644
--- a/rts/sm/Compact.c
+++ b/rts/sm/Compact.c
@@ -979,7 +979,7 @@ compact(StgClosure *static_objects)
{
Task *task;
InCall *incall;
- for (task = all_tasks; task != NULL; task = task->all_link) {
+ for (task = all_tasks; task != NULL; task = task->all_next) {
for (incall = task->incall; incall != NULL;
incall = incall->prev_stack) {
if (incall->tso) {