--- src/mspace.c | 33 +++++++++++++++++++++++++++------ 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 -- 1.7.10.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel