[heap] Skip weak heap objects when sharedness doesn't match
During marking, shared objects should not be marked when not marking the shared heap (i.e. when not doing a shared GC). Doing so is unsafe, as marking can race with sweeper threads sweeping the shared heap. This CL adds the missing check on weak object marking. Bug: v8:12687 Change-Id: I1e0b8ba6b09bbcf665e5ff0f6242ed88f543c1fa Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3583610 Reviewed-by: Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Shu-yu Guo <syg@chromium.org> Cr-Commit-Position: refs/heads/main@{#79964}
This commit is contained in:
parent
e9f92f21c8
commit
387674761f
@ -55,6 +55,7 @@ template <typename THeapObjectSlot>
|
||||
void MarkingVisitorBase<ConcreteVisitor, MarkingState>::ProcessWeakHeapObject(
|
||||
HeapObject host, THeapObjectSlot slot, HeapObject heap_object) {
|
||||
concrete_visitor()->SynchronizePageAccess(heap_object);
|
||||
if (!is_shared_heap_ && heap_object.InSharedHeap()) return;
|
||||
if (concrete_visitor()->marking_state()->IsBlackOrGrey(heap_object)) {
|
||||
// Weak references with live values are directly processed here to
|
||||
// reduce the processing time of weak cells during the main GC
|
||||
|
Loading…
Reference in New Issue
Block a user