diff options
author | Alon Levy <alevy@redhat.com> | 2012-05-23 20:44:06 +0300 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2012-06-15 10:34:57 +0300 |
commit | 6aa3ceb2d3f25726424b03a68ef949deadf7125a (patch) | |
tree | b315bfc61507cd66570dedd3346fdc5a679142d8 | |
parent | 5e505dc6572ee29d0ebe912a8160a8e09bfb5d3e (diff) |
mspace: add mspace_malloc_stats_return
-rw-r--r-- | src/mspace.c | 33 | ||||
-rw-r--r-- | src/mspace.h | 5 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/mspace.c b/src/mspace.c index 17d976a..822aade 100644 --- a/src/mspace.c +++ b/src/mspace.c @@ -1479,7 +1479,8 @@ static struct mallinfo internal_mallinfo(mstate m) { } #endif /* !NO_MALLINFO */ -static void internal_malloc_stats(mstate m) { +static void internal_malloc_stats(mstate m, size_t *ret_maxfp, size_t *ret_fp, + size_t *ret_used) { if (!PREACTION(m)) { size_t maxfp = 0; size_t fp = 0; @@ -1503,9 +1504,21 @@ static void internal_malloc_stats(mstate m) { } } - PRINT((m->user_data, "max system bytes = %10lu\n", (unsigned long)(maxfp))); - PRINT((m->user_data, "system bytes = %10lu\n", (unsigned long)(fp))); - PRINT((m->user_data, "in use bytes = %10lu\n", (unsigned long)(used))); + if (ret_maxfp || ret_fp || ret_used) { + if (ret_maxfp) { + *ret_maxfp = maxfp; + } + if (ret_fp) { + *ret_fp = fp; + } + if (ret_used) { + *ret_used = used; + } + } else { + PRINT((m->user_data, "max system bytes = %10lu\n", (unsigned long)(maxfp))); + PRINT((m->user_data, "system bytes = %10lu\n", (unsigned long)(fp))); + PRINT((m->user_data, "in use bytes = %10lu\n", (unsigned long)(used))); + } POSTACTION(m); } @@ -2389,16 +2402,24 @@ void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { return internal_memalign(ms, alignment, bytes); } -void mspace_malloc_stats(mspace msp) { +void mspace_malloc_stats_return(mspace msp, size_t *ret_maxfp, size_t *ret_fp, + size_t *ret_used) +{ + mstate ms = (mstate)msp; if (ok_magic(ms)) { - internal_malloc_stats(ms); + internal_malloc_stats(ms, ret_maxfp, ret_fp, ret_used); } else { USAGE_ERROR_ACTION(ms,ms); } } + +void mspace_malloc_stats(mspace msp) { + mspace_malloc_stats_return(msp, NULL, NULL, NULL); +} + size_t mspace_footprint(mspace msp) { size_t result; mstate ms = (mstate)msp; diff --git a/src/mspace.h b/src/mspace.h index 8f5ba83..46a6a56 100644 --- a/src/mspace.h +++ b/src/mspace.h @@ -131,9 +131,12 @@ struct mallinfo mspace_mallinfo(mspace msp); /* mspace_malloc_stats behaves as malloc_stats, but reports - properties of the given space. + properties of the given space. The return variant returns instead of + printing the three quantities, maxfp, fp, and used. */ void mspace_malloc_stats(mspace msp); +void mspace_malloc_stats_return(mspace msp, size_t *ret_maxfp, size_t *ret_fp, + size_t *ret_used); /* mspace_trim behaves as malloc_trim, but |