diff options
| author | Jason Evans <jasone@canonware.com> | 2016-05-05 17:45:02 -0700 |
|---|---|---|
| committer | Jason Evans <jasone@canonware.com> | 2016-05-05 18:56:17 -0700 |
| commit | c2f970c32b527660a33fa513a76d913c812dcf7c (patch) | |
| tree | b0593fac905797fa543ac77aa5ebd9e1160cb67f /src/chunk_mmap.c | |
| parent | dc391adc6577b4ed0dac0ce3b1778473e67e4c17 (diff) | |
| download | platform_external_jemalloc_new-c2f970c32b527660a33fa513a76d913c812dcf7c.tar.gz platform_external_jemalloc_new-c2f970c32b527660a33fa513a76d913c812dcf7c.tar.bz2 platform_external_jemalloc_new-c2f970c32b527660a33fa513a76d913c812dcf7c.zip | |
Modify pages_map() to support mapping uncommitted virtual memory.
If the OS overcommits:
- Commit all mappings in pages_map() regardless of whether the caller
requested committed memory.
- Linux-specific: Specify MAP_NORESERVE to avoid
unfortunate interactions with heuristic overcommit mode during
fork(2).
This resolves #193.
Diffstat (limited to 'src/chunk_mmap.c')
| -rw-r--r-- | src/chunk_mmap.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/chunk_mmap.c b/src/chunk_mmap.c index e2e66bc9..f95ae756 100644 --- a/src/chunk_mmap.c +++ b/src/chunk_mmap.c @@ -16,18 +16,16 @@ chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero, bool *commit) do { void *pages; size_t leadsize; - pages = pages_map(NULL, alloc_size); + pages = pages_map(NULL, alloc_size, commit); if (pages == NULL) return (NULL); leadsize = ALIGNMENT_CEILING((uintptr_t)pages, alignment) - (uintptr_t)pages; - ret = pages_trim(pages, alloc_size, leadsize, size); + ret = pages_trim(pages, alloc_size, leadsize, size, commit); } while (ret == NULL); assert(ret != NULL); *zero = true; - if (!*commit) - *commit = pages_decommit(ret, size); return (ret); } @@ -54,7 +52,7 @@ chunk_alloc_mmap(void *new_addr, size_t size, size_t alignment, bool *zero, assert(alignment != 0); assert((alignment & chunksize_mask) == 0); - ret = pages_map(new_addr, size); + ret = pages_map(new_addr, size, commit); if (ret == NULL || ret == new_addr) return (ret); assert(new_addr == NULL); @@ -66,8 +64,6 @@ chunk_alloc_mmap(void *new_addr, size_t size, size_t alignment, bool *zero, assert(ret != NULL); *zero = true; - if (!*commit) - *commit = pages_decommit(ret, size); return (ret); } |
