Fix extent_quantize() to handle greater-than-huge-size extents.

Allocation requests can't directly create extents that exceed
HUGE_MAXCLASS, but extent merging can create them.

This fixes a regression caused by
8a03cf039c (Implement cache index
randomization for large allocations.) and first released in 4.0.0.

This resolves #497.
This commit is contained in:
Jason Evans 2016-11-11 21:14:29 -08:00
parent e916d55ba1
commit 2cdf07aba9

View File

@ -3,15 +3,29 @@
/******************************************************************************/ /******************************************************************************/
/*
* Round down to the nearest chunk size that can actually be requested during
* normal huge allocation.
*/
JEMALLOC_INLINE_C size_t JEMALLOC_INLINE_C size_t
extent_quantize(size_t size) extent_quantize(size_t size)
{ {
size_t ret;
szind_t ind;
assert(size > 0);
ind = size2index(size + 1);
if (ind == NSIZES) {
/* /*
* Round down to the nearest chunk size that can actually be requested * Allocation requests can't directly create extents that exceed
* during normal huge allocation. * HUGE_MAXCLASS, but extent merging can create them.
*/ */
return (index2size(size2index(size + 1) - 1)); return (HUGE_MAXCLASS);
}
ret = index2size(ind - 1);
assert(ret <= size);
return (ret);
} }
JEMALLOC_INLINE_C int JEMALLOC_INLINE_C int