summaryrefslogtreecommitdiffstats
path: root/src/chunk.c
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2013-01-23 18:32:04 (GMT)
committerJason Evans <jasone@canonware.com>2013-01-23 18:32:04 (GMT)
commit83789f45307379e096c4e8be81d9e9a51e3f5a4a (patch)
treef8e39c4489cd99df1ed53475e79a4e5fe76483c2 /src/chunk.c
parent87499f6748ebe4817571e817e9f680ccb5bf54a9 (diff)
parentb5681fb20c17478f2193fead19b7788807e39996 (diff)
downloadjemalloc-3.3.0.zip
jemalloc-3.3.0.tar.gz
jemalloc-3.3.0.tar.bz2
Merge branch 'dev'3.3.0
Diffstat (limited to 'src/chunk.c')
-rw-r--r--src/chunk.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/chunk.c b/src/chunk.c
index 1a3bb4f..46e387e 100644
--- a/src/chunk.c
+++ b/src/chunk.c
@@ -78,6 +78,9 @@ chunk_recycle(extent_tree_t *chunks_szad, extent_tree_t *chunks_ad, size_t size,
assert(node->size >= leadsize + size);
trailsize = node->size - leadsize - size;
ret = (void *)((uintptr_t)node->addr + leadsize);
+ zeroed = node->zeroed;
+ if (zeroed)
+ *zero = true;
/* Remove node from the tree. */
extent_tree_szad_remove(chunks_szad, node);
extent_tree_ad_remove(chunks_ad, node);
@@ -114,17 +117,21 @@ chunk_recycle(extent_tree_t *chunks_szad, extent_tree_t *chunks_ad, size_t size,
}
malloc_mutex_unlock(&chunks_mtx);
- zeroed = false;
- if (node != NULL) {
- if (node->zeroed) {
- zeroed = true;
- *zero = true;
- }
+ if (node != NULL)
base_node_dealloc(node);
- }
- if (zeroed == false && *zero) {
- VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
- memset(ret, 0, size);
+ VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
+ if (*zero) {
+ if (zeroed == false)
+ memset(ret, 0, size);
+ else if (config_debug) {
+ size_t i;
+ size_t *p = (size_t *)(uintptr_t)ret;
+
+ VALGRIND_MAKE_MEM_DEFINED(ret, size);
+ for (i = 0; i < size / sizeof(size_t); i++)
+ assert(p[i] == 0);
+ VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
+ }
}
return (ret);
}
@@ -194,14 +201,6 @@ label_return:
if (config_prof && opt_prof && opt_prof_gdump && gdump)
prof_gdump();
}
- if (config_debug && *zero && ret != NULL) {
- size_t i;
- size_t *p = (size_t *)(uintptr_t)ret;
-
- VALGRIND_MAKE_MEM_DEFINED(ret, size);
- for (i = 0; i < size / sizeof(size_t); i++)
- assert(p[i] == 0);
- }
assert(CHUNK_ADDR2BASE(ret) == ret);
return (ret);
}