diff options
author | Ömer Sinan Ağacan <omeragacan@gmail.com> | 2019-05-01 18:40:33 +0300 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-05-03 20:50:03 -0400 |
commit | f862963b6cdd217730e4f36f07ad52ac9f7be7f3 (patch) | |
tree | d77bf7af1697eb1b88011fc489d7ad24805dbd6b /rts | |
parent | cc495d5777c01ef62129df15caacf87b0e430c6b (diff) | |
download | haskell-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.c | 10 |
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; |