diff options
author | Ben Gamari <ben@smart-cactus.org> | 2020-10-24 19:51:15 -0400 |
---|---|---|
committer | Ben Gamari <ben@well-typed.com> | 2020-12-01 12:48:55 -0500 |
commit | 9ad6e1f12e99330adeacc3b6eea52c6f26324a46 (patch) | |
tree | a76c80902566feff1b5b7e96226420dce9565465 | |
parent | 953de20fc9980fa0768732cab42692733f8c0bfa (diff) | |
download | haskell-9ad6e1f12e99330adeacc3b6eea52c6f26324a46.tar.gz |
rts: Tear down stats_mutex after exitHeapProfiling
Since the latter wants to call getRTSStats.
-rw-r--r-- | rts/RtsStartup.c | 3 | ||||
-rw-r--r-- | rts/Stats.c | 12 | ||||
-rw-r--r-- | rts/Stats.h | 1 | ||||
-rw-r--r-- | rts/sm/Storage.c | 2 |
4 files changed, 13 insertions, 5 deletions
diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index aee50cf470..60376e59aa 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -518,6 +518,9 @@ hs_exit_(bool wait_foreign) shutdownAsyncIO(wait_foreign); #endif + /* tear down statistics subsystem */ + stat_exit(); + // Finally, free all our storage. However, we only free the heap // memory if we have waited for foreign calls to complete; // otherwise a foreign call in progress may still be referencing diff --git a/rts/Stats.c b/rts/Stats.c index 8fb5467151..1a91e706fb 100644 --- a/rts/Stats.c +++ b/rts/Stats.c @@ -1220,7 +1220,7 @@ static void report_one_line(const RTSSummaryStats * sum) } void -stat_exit (void) +stat_exitReport (void) { RTSSummaryStats sum; init_RTSSummaryStats(&sum); @@ -1425,9 +1425,6 @@ stat_exit (void) } } RELEASE_LOCK(&stats_mutex); -#if defined(THREADED_RTS) - closeMutex(&stats_mutex); -#endif statsFlush(); statsClose(); @@ -1451,6 +1448,13 @@ stat_exit (void) RELEASE_LOCK(&all_tasks_mutex); } +void stat_exit() +{ +#if defined(THREADED_RTS) + closeMutex(&stats_mutex); +#endif +} + /* Note [Work Balance] ---------------------- Work balance is a measure of how evenly the work done during parallel garbage diff --git a/rts/Stats.h b/rts/Stats.h index 103564a82a..9d62acef37 100644 --- a/rts/Stats.h +++ b/rts/Stats.h @@ -58,6 +58,7 @@ void stat_endHeapCensus(void); void stat_startExit(void); void stat_endExit(void); +void stat_exitReport(void); void stat_exit(void); void stat_workerStop(void); diff --git a/rts/sm/Storage.c b/rts/sm/Storage.c index 86a111fca8..a88073d1f8 100644 --- a/rts/sm/Storage.c +++ b/rts/sm/Storage.c @@ -302,7 +302,7 @@ exitStorage (void) { nonmovingExit(); updateNurseriesStats(); - stat_exit(); + stat_exitReport(); } void |