Fix dss/mmap allocation precedence code.
Fix dss/mmap allocation precedence code to use recyclable mmap memory only after primary dss allocation fails.
This commit is contained in:
parent
2b592b0f0b
commit
12efefb195
@ -6,6 +6,12 @@ found in the git revision history:
|
|||||||
http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
|
http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
|
||||||
git://canonware.com/jemalloc.git
|
git://canonware.com/jemalloc.git
|
||||||
|
|
||||||
|
* 3.x.x (XXX Not released)
|
||||||
|
|
||||||
|
Bug fixes:
|
||||||
|
- Fix dss/mmap allocation precedence code to use recyclable mmap memory only
|
||||||
|
after primary dss allocation fails.
|
||||||
|
|
||||||
* 3.1.0 (October 16, 2012)
|
* 3.1.0 (October 16, 2012)
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
|
36
src/chunk.c
36
src/chunk.c
@ -146,40 +146,28 @@ chunk_alloc(size_t size, size_t alignment, bool base, bool *zero,
|
|||||||
assert(alignment != 0);
|
assert(alignment != 0);
|
||||||
assert((alignment & chunksize_mask) == 0);
|
assert((alignment & chunksize_mask) == 0);
|
||||||
|
|
||||||
/*
|
|
||||||
* Try to recycle an existing mapping.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* "primary" dss. */
|
/* "primary" dss. */
|
||||||
if (config_dss && dss_prec == dss_prec_primary && (ret =
|
if (config_dss && dss_prec == dss_prec_primary) {
|
||||||
chunk_recycle(&chunks_szad_dss, &chunks_ad_dss, size, alignment,
|
if ((ret = chunk_recycle(&chunks_szad_dss, &chunks_ad_dss, size,
|
||||||
base, zero)) != NULL)
|
alignment, base, zero)) != NULL)
|
||||||
goto label_return;
|
goto label_return;
|
||||||
|
if ((ret = chunk_alloc_dss(size, alignment, zero)) != NULL)
|
||||||
|
goto label_return;
|
||||||
|
}
|
||||||
/* mmap. */
|
/* mmap. */
|
||||||
if ((ret = chunk_recycle(&chunks_szad_mmap, &chunks_ad_mmap, size,
|
if ((ret = chunk_recycle(&chunks_szad_mmap, &chunks_ad_mmap, size,
|
||||||
alignment, base, zero)) != NULL)
|
alignment, base, zero)) != NULL)
|
||||||
goto label_return;
|
goto label_return;
|
||||||
/* "secondary" dss. */
|
|
||||||
if (config_dss && dss_prec == dss_prec_secondary && (ret =
|
|
||||||
chunk_recycle(&chunks_szad_dss, &chunks_ad_dss, size, alignment,
|
|
||||||
base, zero)) != NULL)
|
|
||||||
goto label_return;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Try to allocate a new mapping.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* "primary" dss. */
|
|
||||||
if (config_dss && dss_prec == dss_prec_primary && (ret =
|
|
||||||
chunk_alloc_dss(size, alignment, zero)) != NULL)
|
|
||||||
goto label_return;
|
|
||||||
/* mmap. */
|
|
||||||
if ((ret = chunk_alloc_mmap(size, alignment, zero)) != NULL)
|
if ((ret = chunk_alloc_mmap(size, alignment, zero)) != NULL)
|
||||||
goto label_return;
|
goto label_return;
|
||||||
/* "secondary" dss. */
|
/* "secondary" dss. */
|
||||||
if (config_dss && dss_prec == dss_prec_secondary && (ret =
|
if (config_dss && dss_prec == dss_prec_secondary) {
|
||||||
chunk_alloc_dss(size, alignment, zero)) != NULL)
|
if ((ret = chunk_recycle(&chunks_szad_dss, &chunks_ad_dss, size,
|
||||||
|
alignment, base, zero)) != NULL)
|
||||||
goto label_return;
|
goto label_return;
|
||||||
|
if ((ret = chunk_alloc_dss(size, alignment, zero)) != NULL)
|
||||||
|
goto label_return;
|
||||||
|
}
|
||||||
|
|
||||||
/* All strategies for allocation failed. */
|
/* All strategies for allocation failed. */
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user