Commit a61393a3 authored by Dominik Inführ's avatar Dominik Inführ Committed by Commit Bot

[heap] Make RegisterStrongRoots thread-safe

CanonicalHandleScope is now also used on background threads. Therefore
Heap::RegisterStrongRoots and Heap::UnregisterStrongRoots are not
exclusively used on the main thread anymore. Simply protect this list
with a mutex.

Bug: v8:10315, v8:10814
Change-Id: Id08269c9f7fecae8c570ab711c522d111b06b005
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2364503Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69488}
parent 536092f7
......@@ -6185,6 +6185,7 @@ size_t Heap::OldArrayBufferBytes() {
}
void Heap::RegisterStrongRoots(FullObjectSlot start, FullObjectSlot end) {
base::MutexGuard guard(&strong_roots_mutex_);
StrongRootsList* list = new StrongRootsList();
list->next = strong_roots_list_;
list->start = start;
......@@ -6193,6 +6194,7 @@ void Heap::RegisterStrongRoots(FullObjectSlot start, FullObjectSlot end) {
}
void Heap::UnregisterStrongRoots(FullObjectSlot start) {
base::MutexGuard guard(&strong_roots_mutex_);
StrongRootsList* prev = nullptr;
StrongRootsList* list = strong_roots_list_;
while (list != nullptr) {
......
......@@ -2200,6 +2200,7 @@ class Heap {
std::unique_ptr<LocalEmbedderHeapTracer> local_embedder_heap_tracer_;
std::unique_ptr<MarkingBarrier> marking_barrier_;
StrongRootsList* strong_roots_list_ = nullptr;
base::Mutex strong_roots_mutex_;
bool need_to_remove_stress_concurrent_allocation_observer_ = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment