From 12b58b23de974232e991c650405f929f8b0dcc9f Mon Sep 17 00:00:00 2001 From: Hiroshi Yamauchi Date: Tue, 1 Nov 2016 11:55:29 -0700 Subject: Clean up the runtime read barrier and fix fake address dependency. - Rename GetReadBarrierPointer to GetReadBarrierState. - Change its return type to uint32_t. - Fix the runtime fake address dependency for arm/arm64 using inline asm. - Drop ReadBarrier::black_ptr_ and some brooks code. Bug: 12687968 Test: test-art with CC, Ritz EAAC, libartd boot on N9. Change-Id: I595970db825db5be2e98ee1fcbd7696d5501af55 --- runtime/gc/reference_queue.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'runtime/gc/reference_queue.cc') diff --git a/runtime/gc/reference_queue.cc b/runtime/gc/reference_queue.cc index 4e6f7da5f0..a0eb197bd5 100644 --- a/runtime/gc/reference_queue.cc +++ b/runtime/gc/reference_queue.cc @@ -75,19 +75,19 @@ ObjPtr ReferenceQueue::DequeuePendingReference() { // collector (SemiSpace) is running. CHECK(ref != nullptr); collector::ConcurrentCopying* concurrent_copying = heap->ConcurrentCopyingCollector(); - mirror::Object* rb_ptr = ref->GetReadBarrierPointer(); - if (rb_ptr == ReadBarrier::GrayPtr()) { - ref->AtomicSetReadBarrierPointer(ReadBarrier::GrayPtr(), ReadBarrier::WhitePtr()); - CHECK_EQ(ref->GetReadBarrierPointer(), ReadBarrier::WhitePtr()); + uint32_t rb_state = ref->GetReadBarrierState(); + if (rb_state == ReadBarrier::GrayState()) { + ref->AtomicSetReadBarrierState(ReadBarrier::GrayState(), ReadBarrier::WhiteState()); + CHECK_EQ(ref->GetReadBarrierState(), ReadBarrier::WhiteState()); } else { // In ConcurrentCopying::ProcessMarkStackRef() we may leave a white reference in the queue and // find it here, which is OK. - CHECK_EQ(rb_ptr, ReadBarrier::WhitePtr()) << "ref=" << ref << " rb_ptr=" << rb_ptr; + CHECK_EQ(rb_state, ReadBarrier::WhiteState()) << "ref=" << ref << " rb_state=" << rb_state; ObjPtr referent = ref->GetReferent(); // The referent could be null if it's cleared by a mutator (Reference.clear()). if (referent != nullptr) { CHECK(concurrent_copying->IsInToSpace(referent.Ptr())) - << "ref=" << ref << " rb_ptr=" << ref->GetReadBarrierPointer() + << "ref=" << ref << " rb_state=" << ref->GetReadBarrierState() << " referent=" << referent; } } -- cgit v1.2.3-59-g8ed1b