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