| Index: Source/platform/heap/Heap.cpp
|
| diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp
|
| index b3dcd33f8589d92965b49790f7e419433b177516..060ec5dfd4f22dbd3e2f68e2caca1da477b4a560 100644
|
| --- a/Source/platform/heap/Heap.cpp
|
| +++ b/Source/platform/heap/Heap.cpp
|
| @@ -729,8 +729,13 @@ bool ThreadHeap<Header>::allocateFromFreeList(size_t minSize)
|
| size_t bucketSize = 1 << m_freeList.m_biggestFreeListIndex;
|
| int i = m_freeList.m_biggestFreeListIndex;
|
| for (; i > 0; i--, bucketSize >>= 1) {
|
| - if (bucketSize < minSize)
|
| - break;
|
| + if (bucketSize < minSize) {
|
| + // A FreeListEntry for bucketSize might be larger than minSize.
|
| + // FIXME: We check only the first FreeListEntry because searching
|
| + // the entire list is costly.
|
| + if (!m_freeList.m_freeLists[i] || m_freeList.m_freeLists[i]->size() < minSize)
|
| + break;
|
| + }
|
| FreeListEntry* entry = m_freeList.m_freeLists[i];
|
| if (entry) {
|
| m_freeList.m_biggestFreeListIndex = i;
|
|
|