Index: src/heap/spaces.cc |
diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc |
index a68db97395fcb8cf9cf660d93cf3adb3e725c3e5..2f71d456f86b64883b5fb1e94877925cec1a19dc 100644 |
--- a/src/heap/spaces.cc |
+++ b/src/heap/spaces.cc |
@@ -492,6 +492,7 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size, |
chunk->progress_bar_ = 0; |
chunk->high_water_mark_.SetValue(static_cast<intptr_t>(area_start - base)); |
chunk->set_parallel_sweeping(SWEEPING_DONE); |
+ chunk->parallel_compaction_.SetValue(kCompactingDone); |
chunk->mutex_ = NULL; |
chunk->available_in_small_free_list_ = 0; |
chunk->available_in_medium_free_list_ = 0; |
@@ -2258,6 +2259,30 @@ intptr_t FreeList::Concatenate(FreeList* free_list) { |
} |
+void FreeList::Divide(FreeList** free_lists_to_fill, size_t num) { |
+ DCHECK(num > 0); |
+ int size = 0; |
+ FreeSpace* space = nullptr; |
+ size_t cnt = 0; |
+ while ((space = small_list_.PickNodeFromList(&size)) != nullptr) { |
+ free_lists_to_fill[cnt % num]->small_list_.Free(space, size); |
+ cnt++; |
+ } |
+ while ((space = medium_list_.PickNodeFromList(&size)) != nullptr) { |
+ free_lists_to_fill[cnt % num]->medium_list_.Free(space, size); |
+ cnt++; |
+ } |
+ while ((space = large_list_.PickNodeFromList(&size)) != nullptr) { |
+ free_lists_to_fill[cnt % num]->large_list_.Free(space, size); |
+ cnt++; |
+ } |
+ while ((space = huge_list_.PickNodeFromList(&size)) != nullptr) { |
+ free_lists_to_fill[cnt % num]->huge_list_.Free(space, size); |
+ cnt++; |
+ } |
+} |
+ |
+ |
void FreeList::Reset() { |
small_list_.Reset(); |
medium_list_.Reset(); |