diff options
author | Jason Evans <jasone@canonware.com> | 2015-08-04 17:49:46 (GMT) |
---|---|---|
committer | Jason Evans <jasone@canonware.com> | 2015-08-07 07:50:58 (GMT) |
commit | 8fadb1a8c2d0219aded566bc5fac7d29cff9bb67 (patch) | |
tree | 2bb5ef64b257a1cbcf6c4880f23f24ef9d989e13 /src/chunk_mmap.c | |
parent | 5716d97f7575708453ca477651eff6f1ac653dd1 (diff) | |
download | jemalloc-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.c | 8 |
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); } |