summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-05-23 20:44:06 +0300
committerAlon Levy <alevy@redhat.com>2012-06-15 10:34:57 +0300
commit6aa3ceb2d3f25726424b03a68ef949deadf7125a (patch)
treeb315bfc61507cd66570dedd3346fdc5a679142d8
parent5e505dc6572ee29d0ebe912a8160a8e09bfb5d3e (diff)
mspace: add mspace_malloc_stats_return
-rw-r--r--src/mspace.c33
-rw-r--r--src/mspace.h5
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