diff options
author | 2016-11-01 11:55:29 -0700 | |
---|---|---|
committer | 2016-11-02 16:31:04 -0700 | |
commit | 12b58b23de974232e991c650405f929f8b0dcc9f (patch) | |
tree | bc08011e3b9f4c132fc605dc54d1d5f50c932a29 /runtime/gc/reference_queue.cc | |
parent | b0b2080b4cea8365052d1be973e927f8ee85f609 (diff) |
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
Diffstat (limited to 'runtime/gc/reference_queue.cc')
-rw-r--r-- | runtime/gc/reference_queue.cc | 12 |
1 files changed, 6 insertions, 6 deletions
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<mirror::Reference> 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<mirror::Object> referent = ref->GetReferent<kWithoutReadBarrier>(); // 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; } } |