summaryrefslogtreecommitdiffstats
path: root/src/ctl.c
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2012-11-09 19:44:03 (GMT)
committerJason Evans <jasone@canonware.com>2012-11-09 19:44:03 (GMT)
commit87499f6748ebe4817571e817e9f680ccb5bf54a9 (patch)
treea98396797d7550a3ceb04e7ddaed7bb8b27f13d7 /src/ctl.c
parent3b1f3aca54fede23299cde9034f7b909c3d290d7 (diff)
parent556ddc7fa94f13c388ec6c9d2d54ace250540f2c (diff)
downloadjemalloc-3.2.0.zip
jemalloc-3.2.0.tar.gz
jemalloc-3.2.0.tar.bz2
Merge branch 'dev'3.2.0
Diffstat (limited to 'src/ctl.c')
-rw-r--r--src/ctl.c48
1 files changed, 22 insertions, 26 deletions
diff --git a/src/ctl.c b/src/ctl.c
index e3ab9da..6e01b1e 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -113,7 +113,7 @@ CTL_PROTO(opt_prof_final)
CTL_PROTO(opt_prof_leak)
CTL_PROTO(opt_prof_accum)
CTL_PROTO(arena_i_purge)
-static int arena_purge(unsigned arena_ind);
+static void arena_purge(unsigned arena_ind);
CTL_PROTO(arena_i_dss)
INDEX_PROTO(arena_i)
CTL_PROTO(arenas_bin_i_size)
@@ -1274,35 +1274,27 @@ CTL_RO_NL_CGEN(config_prof, opt_prof_accum, opt_prof_accum, bool)
/******************************************************************************/
-static int
+/* ctl_mutex must be held during execution of this function. */
+static void
arena_purge(unsigned arena_ind)
{
- int ret;
-
- malloc_mutex_lock(&ctl_mtx);
- {
- VARIABLE_ARRAY(arena_t *, tarenas, ctl_stats.narenas);
+ VARIABLE_ARRAY(arena_t *, tarenas, ctl_stats.narenas);
- malloc_mutex_lock(&arenas_lock);
- memcpy(tarenas, arenas, sizeof(arena_t *) * ctl_stats.narenas);
- malloc_mutex_unlock(&arenas_lock);
+ malloc_mutex_lock(&arenas_lock);
+ memcpy(tarenas, arenas, sizeof(arena_t *) * ctl_stats.narenas);
+ malloc_mutex_unlock(&arenas_lock);
- if (arena_ind == ctl_stats.narenas) {
- unsigned i;
- for (i = 0; i < ctl_stats.narenas; i++) {
- if (tarenas[i] != NULL)
- arena_purge_all(tarenas[i]);
- }
- } else {
- assert(arena_ind < ctl_stats.narenas);
- if (tarenas[arena_ind] != NULL)
- arena_purge_all(tarenas[arena_ind]);
+ if (arena_ind == ctl_stats.narenas) {
+ unsigned i;
+ for (i = 0; i < ctl_stats.narenas; i++) {
+ if (tarenas[i] != NULL)
+ arena_purge_all(tarenas[i]);
}
+ } else {
+ assert(arena_ind < ctl_stats.narenas);
+ if (tarenas[arena_ind] != NULL)
+ arena_purge_all(tarenas[arena_ind]);
}
-
- ret = 0;
- malloc_mutex_unlock(&ctl_mtx);
- return (ret);
}
static int
@@ -1313,8 +1305,11 @@ arena_i_purge_ctl(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp,
READONLY();
WRITEONLY();
- ret = arena_purge(mib[1]);
+ malloc_mutex_lock(&ctl_mtx);
+ arena_purge(mib[1]);
+ malloc_mutex_unlock(&ctl_mtx);
+ ret = 0;
label_return:
return (ret);
}
@@ -1483,7 +1478,8 @@ arenas_purge_ctl(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp,
else {
if (arena_ind == UINT_MAX)
arena_ind = ctl_stats.narenas;
- ret = arena_purge(arena_ind);
+ arena_purge(arena_ind);
+ ret = 0;
}
label_return: