summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorÖmer Sinan Ağacan <omeragacan@gmail.com>2019-05-01 18:40:33 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-05-03 20:50:03 -0400
commitf862963b6cdd217730e4f36f07ad52ac9f7be7f3 (patch)
treed77bf7af1697eb1b88011fc489d7ad24805dbd6b /rts
parentcc495d5777c01ef62129df15caacf87b0e430c6b (diff)
downloadhaskell-f862963b6cdd217730e4f36f07ad52ac9f7be7f3.tar.gz
rts: Properly free the RTSSummaryStats structure
`stat_exit` always allocates a `RTSSummaryStats` but only sometimes frees it, which casues leaks. With this patch we unconditionally free the structure, fixing the leak. Fixes #16584
Diffstat (limited to 'rts')
-rw-r--r--rts/Stats.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/rts/Stats.c b/rts/Stats.c
index b2e48c48cd..461eb7604c 100644
--- a/rts/Stats.c
+++ b/rts/Stats.c
@@ -657,11 +657,8 @@ static void init_RTSSummaryStats(RTSSummaryStats* sum)
static void free_RTSSummaryStats(RTSSummaryStats * sum)
{
- if (!sum) { return; }
- if (!sum->gc_summary_stats) {
- stgFree(sum->gc_summary_stats);
- sum->gc_summary_stats = NULL;
- }
+ stgFree(sum->gc_summary_stats);
+ sum->gc_summary_stats = NULL;
}
static void report_summary(const RTSSummaryStats* sum)
@@ -1257,11 +1254,12 @@ stat_exit (void)
}
}
- free_RTSSummaryStats(&sum);
statsFlush();
statsClose();
}
+ free_RTSSummaryStats(&sum);
+
if (GC_coll_cpu) {
stgFree(GC_coll_cpu);
GC_coll_cpu = NULL;