summaryrefslogtreecommitdiffstats
path: root/src/chunk_mmap.c
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2015-08-04 17:49:46 (GMT)
committerJason Evans <jasone@canonware.com>2015-08-07 07:50:58 (GMT)
commit8fadb1a8c2d0219aded566bc5fac7d29cff9bb67 (patch)
tree2bb5ef64b257a1cbcf6c4880f23f24ef9d989e13 /src/chunk_mmap.c
parent5716d97f7575708453ca477651eff6f1ac653dd1 (diff)
downloadjemalloc-8fadb1a8c2d0219aded566bc5fac7d29cff9bb67.zip
jemalloc-8fadb1a8c2d0219aded566bc5fac7d29cff9bb67.tar.gz
jemalloc-8fadb1a8c2d0219aded566bc5fac7d29cff9bb67.tar.bz2
Implement chunk hook support for page run commit/decommit.
Cascade from decommit to purge when purging unused dirty pages, so that it is possible to decommit cleaned memory rather than just purging. For non-Windows debug builds, decommit runs rather than purging them, since this causes access of deallocated runs to segfault. This resolves #251.
Diffstat (limited to 'src/chunk_mmap.c')
-rw-r--r--src/chunk_mmap.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/chunk_mmap.c b/src/chunk_mmap.c
index f243615..a91a14c 100644
--- a/src/chunk_mmap.c
+++ b/src/chunk_mmap.c
@@ -4,7 +4,7 @@
/******************************************************************************/
static void *
-chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero)
+chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero, bool *commit)
{
void *ret, *pages;
size_t alloc_size, leadsize;
@@ -24,11 +24,12 @@ chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero)
assert(ret != NULL);
*zero = true;
+ *commit = true;
return (ret);
}
void *
-chunk_alloc_mmap(size_t size, size_t alignment, bool *zero)
+chunk_alloc_mmap(size_t size, size_t alignment, bool *zero, bool *commit)
{
void *ret;
size_t offset;
@@ -55,11 +56,12 @@ chunk_alloc_mmap(size_t size, size_t alignment, bool *zero)
offset = ALIGNMENT_ADDR2OFFSET(ret, alignment);
if (offset != 0) {
pages_unmap(ret, size);
- return (chunk_alloc_mmap_slow(size, alignment, zero));
+ return (chunk_alloc_mmap_slow(size, alignment, zero, commit));
}
assert(ret != NULL);
*zero = true;
+ *commit = true;
return (ret);
}