diff --git a/include/jemalloc/internal/stats.h b/include/jemalloc/internal/stats.h index 3720619b..7cd14302 100644 --- a/include/jemalloc/internal/stats.h +++ b/include/jemalloc/internal/stats.h @@ -44,5 +44,8 @@ bool stats_interval_accum(tsd_t *tsd, uint64_t bytes); void stats_print(write_cb_t *write_cb, void *cbopaque, const char *opts); bool stats_boot(void); +void stats_prefork(tsdn_t *tsdn); +void stats_postfork_parent(tsdn_t *tsdn); +void stats_postfork_child(tsdn_t *tsdn); #endif /* JEMALLOC_INTERNAL_STATS_H */ diff --git a/src/jemalloc.c b/src/jemalloc.c index 14b2a088..78da45bc 100644 --- a/src/jemalloc.c +++ b/src/jemalloc.c @@ -3989,6 +3989,7 @@ _malloc_prefork(void) } } prof_prefork1(tsd_tsdn(tsd)); + stats_prefork(tsd_tsdn(tsd)); tsd_prefork(tsd); } @@ -4016,6 +4017,7 @@ _malloc_postfork(void) witness_postfork_parent(tsd_witness_tsdp_get(tsd)); /* Release all mutexes, now that fork() has completed. */ + stats_postfork_parent(tsd_tsdn(tsd)); for (i = 0, narenas = narenas_total_get(); i < narenas; i++) { arena_t *arena; @@ -4045,6 +4047,7 @@ jemalloc_postfork_child(void) { witness_postfork_child(tsd_witness_tsdp_get(tsd)); /* Release all mutexes, now that fork() has completed. */ + stats_postfork_child(tsd_tsdn(tsd)); for (i = 0, narenas = narenas_total_get(); i < narenas; i++) { arena_t *arena; diff --git a/src/stats.c b/src/stats.c index 0a1a99da..56d3b489 100644 --- a/src/stats.c +++ b/src/stats.c @@ -1526,3 +1526,18 @@ stats_boot(void) { return counter_accum_init(&stats_interval_accumulated, stats_interval); } + +void +stats_prefork(tsdn_t *tsdn) { + counter_prefork(tsdn, &stats_interval_accumulated); +} + +void +stats_postfork_parent(tsdn_t *tsdn) { + counter_postfork_parent(tsdn, &stats_interval_accumulated); +} + +void +stats_postfork_child(tsdn_t *tsdn) { + counter_postfork_child(tsdn, &stats_interval_accumulated); +}