93084cdc89
This is discovered and suggested by @jasone in #1468. When custom extent hooks are in use, we should ensure page alignment on the extent alloc path, instead of relying on the user hooks to do so.
43 lines
933 B
C
43 lines
933 B
C
#define JEMALLOC_EXTENT_MMAP_C_
|
|
#include "jemalloc/internal/jemalloc_preamble.h"
|
|
#include "jemalloc/internal/jemalloc_internal_includes.h"
|
|
|
|
#include "jemalloc/internal/assert.h"
|
|
#include "jemalloc/internal/extent_mmap.h"
|
|
|
|
/******************************************************************************/
|
|
/* Data. */
|
|
|
|
bool opt_retain =
|
|
#ifdef JEMALLOC_RETAIN
|
|
true
|
|
#else
|
|
false
|
|
#endif
|
|
;
|
|
|
|
/******************************************************************************/
|
|
|
|
void *
|
|
extent_alloc_mmap(void *new_addr, size_t size, size_t alignment, bool *zero,
|
|
bool *commit) {
|
|
assert(alignment == ALIGNMENT_CEILING(alignment, PAGE));
|
|
void *ret = pages_map(new_addr, size, alignment, commit);
|
|
if (ret == NULL) {
|
|
return NULL;
|
|
}
|
|
assert(ret != NULL);
|
|
if (*commit) {
|
|
*zero = true;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
bool
|
|
extent_dalloc_mmap(void *addr, size_t size) {
|
|
if (!opt_retain) {
|
|
pages_unmap(addr, size);
|
|
}
|
|
return opt_retain;
|
|
}
|