Commit f678160b authored by Michael Lippautz's avatar Michael Lippautz Committed by Commit Bot

[oilpan] Move check for callback stack containment to Heap

The method require heap access for every single check so it should live
on Heap.

Bug: chromium:757440
Change-Id: Id9f4530bbd488b2e23e64c0f959427ad662d72fa
Reviewed-on: https://chromium-review.googlesource.com/973307Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544714}
parent b1134c9d
......@@ -871,6 +871,15 @@ void ThreadHeap::WriteBarrierInternal(BasePage* page, const void* value) {
ThreadHeap::GcInfo(header->GcInfoIndex())->trace_);
}
void ThreadHeap::CheckObjectNotInCallbackStacks(const void* object) {
#if DCHECK_IS_ON()
DCHECK(!MarkingStack()->HasCallbackForObject(object));
DCHECK(!PostMarkingCallbackStack()->HasCallbackForObject(object));
DCHECK(!WeakCallbackStack()->HasCallbackForObject(object));
DCHECK(!EphemeronStack()->HasCallbackForObject(object));
#endif
}
ThreadHeap* ThreadHeap::main_thread_heap_ = nullptr;
} // namespace blink
......@@ -236,6 +236,8 @@ class PLATFORM_EXPORT ThreadHeap {
}
CallbackStack* EphemeronStack() const { return ephemeron_stack_.get(); }
void CheckObjectNotInCallbackStacks(const void*);
void VisitPersistentRoots(Visitor*);
void VisitStackRoots(MarkingVisitor*);
void EnterSafePoint(ThreadState*);
......
......@@ -27,10 +27,10 @@ void HeapAllocator::BackingFree(void* address) {
// free is disabled for surviving backings during lazy sweeping.
if (header->IsMarked())
return;
state->CheckObjectNotInCallbackStacks(address);
NormalPageArena* arena = static_cast<NormalPage*>(page)->ArenaForNormalPage();
state->Heap().CheckObjectNotInCallbackStacks(address);
state->Heap().PromptlyFreed(header->GcInfoIndex());
arena->PromptlyFreeObject(header);
static_cast<NormalPage*>(page)->ArenaForNormalPage()->PromptlyFreeObject(
header);
}
void HeapAllocator::FreeVectorBacking(void* address) {
......
......@@ -1488,13 +1488,4 @@ void ThreadState::CollectAllGarbage() {
}
}
void ThreadState::CheckObjectNotInCallbackStacks(const void* object) {
#if DCHECK_IS_ON()
DCHECK(!Heap().MarkingStack()->HasCallbackForObject(object));
DCHECK(!Heap().PostMarkingCallbackStack()->HasCallbackForObject(object));
DCHECK(!Heap().WeakCallbackStack()->HasCallbackForObject(object));
DCHECK(!Heap().EphemeronStack()->HasCallbackForObject(object));
#endif
}
} // namespace blink
......@@ -344,8 +344,6 @@ class PLATFORM_EXPORT ThreadState {
bool IsIncrementalMarking() const { return incremental_marking_; }
void SetIncrementalMarking(bool value) { incremental_marking_ = value; }
void CheckObjectNotInCallbackStacks(const void*);
class MainThreadGCForbiddenScope final {
STACK_ALLOCATED();
......
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