summaryrefslogtreecommitdiff
path: root/rts/Stats.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/Stats.c')
-rw-r--r--rts/Stats.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/rts/Stats.c b/rts/Stats.c
index 282e799d23..895ff3f040 100644
--- a/rts/Stats.c
+++ b/rts/Stats.c
@@ -523,10 +523,18 @@ stat_endGC (Capability *cap, gc_thread *initiating_gct, W_ live, W_ copied, W_ s
initiating_gct->gc_start_elapsed - initiating_gct->gc_sync_start_elapsed;
stats.gc.elapsed_ns = current_elapsed - initiating_gct->gc_start_elapsed;
stats.gc.cpu_ns = 0;
- for (unsigned int i=0; i < par_n_threads; i++) {
- gc_thread *gct = gc_threads[i];
- ASSERT(gct->gc_end_cpu >= gct->gc_start_cpu);
- stats.gc.cpu_ns += gct->gc_end_cpu - gct->gc_start_cpu;
+ // see Note [n_gc_threads]
+ // par_n_threads is set to n_gc_threads at the single callsite of this
+ // function
+ if (par_n_threads == 1) {
+ ASSERT(initiating_gct->gc_end_cpu >= initiating_gct->gc_start_cpu);
+ stats.gc.cpu_ns += initiating_gct->gc_end_cpu - initiating_gct->gc_start_cpu;
+ } else {
+ for (unsigned int i=0; i < par_n_threads; i++) {
+ gc_thread *gct = gc_threads[i];
+ ASSERT(gct->gc_end_cpu >= gct->gc_start_cpu);
+ stats.gc.cpu_ns += gct->gc_end_cpu - gct->gc_start_cpu;
+ }
}
}
// -------------------------------------------------