bmalloc: largeMax calculation is wrong on iOS
authorsbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 5 Feb 2016 21:34:27 +0000 (21:34 +0000)
committersbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 5 Feb 2016 21:34:27 +0000 (21:34 +0000)
commitee0644368ccda52554b785c88d36aa8bdeffa23e
tree6af6be0c5293c126ad29e621bd59728ab05a2534
parent1e49ea77ea474fb4ceb710b885dcafb6499f575a
bmalloc: largeMax calculation is wrong on iOS
https://bugs.webkit.org/show_bug.cgi?id=153923

Reviewed by Mark Lam.

Our number for largeMax was larger than what we had
space to actually allocate inside the LargeChunk. This made
it so that we would allocate a large object for something
that really should be extra large. Previously:
largeMax + sizeof(LargeChunk) > 1MB
which meant that when we would grow() to accommodate an allocation
of a particular size inside a LargeObject despite the fact that
the allocation size would be too large to actually fit in the LargeObject.
This would manifest when we had an allocation size in the range:
1MB - sizeof(LargeChunk) < allocation size < largeMax

We fix this bug by being precise in our calculation of largeMax
instead of just assuming largeChunkSize * 99/100 is enough
space for the metadata.

* bmalloc/LargeChunk.h:
(bmalloc::LargeChunk::get):
* bmalloc/Sizes.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196186 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/LargeChunk.h
Source/bmalloc/bmalloc/Sizes.h
Source/bmalloc/bmalloc/VMHeap.cpp