| Index: runtime/vm/freelist.cc | 
| diff --git a/runtime/vm/freelist.cc b/runtime/vm/freelist.cc | 
| index 391dd22bcde0decd7b8f4f013a7e948e66aed057..c2ce1855f17652fc76305df5afdc5f8e8e94bab2 100644 | 
| --- a/runtime/vm/freelist.cc | 
| +++ b/runtime/vm/freelist.cc | 
| @@ -54,17 +54,14 @@ uword FreeList::TryAllocate(intptr_t size) { | 
| return reinterpret_cast<uword>(DequeueElement(index)); | 
| } | 
|  | 
| -  if (index < kNumLists) { | 
| -    index++; | 
| -    while (index < kNumLists) { | 
| -      if (free_map_.Test(index)) { | 
| -        // Dequeue an element from the list, split and enqueue the remainder in | 
| -        // the appropriate list. | 
| -        FreeListElement* element = DequeueElement(index); | 
| -        SplitElementAfterAndEnqueue(element, size); | 
| -        return reinterpret_cast<uword>(element); | 
| -      } | 
| -      index++; | 
| +  if ((index + 1) < kNumLists) { | 
| +    intptr_t next_index = free_map_.Next(index + 1); | 
| +    if (next_index != -1) { | 
| +      // Dequeue an element from the list, split and enqueue the remainder in | 
| +      // the appropriate list. | 
| +      FreeListElement* element = DequeueElement(next_index); | 
| +      SplitElementAfterAndEnqueue(element, size); | 
| +      return reinterpret_cast<uword>(element); | 
| } | 
| } | 
|  | 
| @@ -118,7 +115,7 @@ intptr_t FreeList::IndexForSize(intptr_t size) { | 
|  | 
| void FreeList::EnqueueElement(FreeListElement* element, intptr_t index) { | 
| FreeListElement* next = free_lists_[index]; | 
| -  if (next == NULL) { | 
| +  if (next == NULL && index != kNumLists) { | 
| free_map_.Set(index, true); | 
| } | 
| element->set_next(next); | 
| @@ -129,7 +126,7 @@ void FreeList::EnqueueElement(FreeListElement* element, intptr_t index) { | 
| FreeListElement* FreeList::DequeueElement(intptr_t index) { | 
| FreeListElement* result = free_lists_[index]; | 
| FreeListElement* next = result->next(); | 
| -  if (next == NULL) { | 
| +  if (next == NULL && index != kNumLists) { | 
| free_map_.Set(index, false); | 
| } | 
| free_lists_[index] = next; | 
|  |