Skip to content

Commit fac682c

Browse files
mkustermanncommit-bot@chromium.org
authored andcommitted
[vm/gc] Hold lock before accessing PageSpace::large_pages_
Change-Id: I08c4d125e929f0c1824204b813920ac8a7cf1f59 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111721 Reviewed-by: Ryan Macnak <[email protected]> Commit-Queue: Martin Kustermann <[email protected]>
1 parent f8f77eb commit fac682c

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

runtime/vm/heap/pages.cc

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -346,15 +346,19 @@ HeapPage* PageSpace::AllocateLargePage(intptr_t size, HeapPage::PageType type) {
346346
Heap::RegionName(heap_, is_exec ? Heap::kCode : Heap::kOld, vm_name,
347347
kVmNameSize);
348348
HeapPage* page = HeapPage::Allocate(page_size_in_words, type, vm_name);
349-
if (page == NULL) {
350-
IncreaseCapacityInWords(-page_size_in_words);
351-
return NULL;
349+
{
350+
MutexLocker ml(&pages_lock_);
351+
if (page == nullptr) {
352+
IncreaseCapacityInWordsLocked(-page_size_in_words);
353+
return nullptr;
354+
}
355+
page->set_next(large_pages_);
356+
large_pages_ = page;
357+
358+
// Only one object in this page (at least until String::MakeExternal or
359+
// Array::MakeFixedLength is called).
360+
page->set_object_end(page->object_start() + size);
352361
}
353-
page->set_next(large_pages_);
354-
large_pages_ = page;
355-
// Only one object in this page (at least until String::MakeExternal or
356-
// Array::MakeFixedLength is called).
357-
page->set_object_end(page->object_start() + size);
358362
return page;
359363
}
360364

0 commit comments

Comments
 (0)