Commit 350a7193 authored by Omer Katz's avatar Omer Katz Committed by Commit Bot

heap: Fix data race in DynamicallyMarkAddress

If a not_fully_constructed object was reached again and marked by
concurrent markers while the not_fully_constructed worklist was being
emptied, we would get a race between setting mark bit and reading size
for verification in debug modes.

Bug: 986235
Change-Id: Ibb7b7619e6965901fb2a94a5c742db10070b64e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2156488
Commit-Queue: Omer Katz <omerkatz@chromium.org>
Reviewed-by: default avatarMichael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760490}
parent b0612364
...@@ -223,7 +223,9 @@ MarkingVisitor::MarkingVisitor(ThreadState* state, MarkingMode marking_mode) ...@@ -223,7 +223,9 @@ MarkingVisitor::MarkingVisitor(ThreadState* state, MarkingMode marking_mode)
} }
void MarkingVisitor::DynamicallyMarkAddress(ConstAddress address) { void MarkingVisitor::DynamicallyMarkAddress(ConstAddress address) {
HeapObjectHeader* const header = HeapObjectHeader::FromInnerAddress(address); HeapObjectHeader* const header =
HeapObjectHeader::FromInnerAddress<HeapObjectHeader::AccessMode::kAtomic>(
address);
DCHECK(header); DCHECK(header);
DCHECK(!IsInConstruction(header)); DCHECK(!IsInConstruction(header));
if (MarkHeaderNoTracing(header)) { if (MarkHeaderNoTracing(header)) {
......
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