Home | History | Annotate | Download | only in gc

Lines Matching refs:ref

32 void ReferenceQueue::AtomicEnqueueIfNotEnqueued(Thread* self, ObjPtr<mirror::Reference> ref) {
33 DCHECK(ref != nullptr);
35 if (ref->IsUnprocessed()) {
36 EnqueueReference(ref);
40 void ReferenceQueue::EnqueueReference(ObjPtr<mirror::Reference> ref) {
41 DCHECK(ref != nullptr);
42 CHECK(ref->IsUnprocessed());
44 // 1 element cyclic queue, ie: Reference ref = ..; ref.pendingNext = ref;
45 list_ = ref.Ptr();
51 ref->SetPendingNext(head);
54 list_->SetPendingNext(ref);
59 ObjPtr<mirror::Reference> ref = list_->GetPendingNext<kWithoutReadBarrier>();
60 DCHECK(ref != nullptr);
63 if (list_ == ref) {
66 ObjPtr<mirror::Reference> next = ref->GetPendingNext<kWithoutReadBarrier>();
69 ref->SetPendingNext(nullptr);
70 return ref;
74 void ReferenceQueue::DisableReadBarrierForReference(ObjPtr<mirror::Reference> ref) {
81 CHECK(ref != nullptr);
83 uint32_t rb_state = ref->GetReadBarrierState();
85 ref->AtomicSetReadBarrierState(ReadBarrier::GrayState(), ReadBarrier::WhiteState());
86 CHECK_EQ(ref->GetReadBarrierState(), ReadBarrier::WhiteState());
90 CHECK_EQ(rb_state, ReadBarrier::WhiteState()) << "ref=" << ref << " rb_state=" << rb_state;
91 ObjPtr<mirror::Object> referent = ref->GetReferent<kWithoutReadBarrier>();
95 << "ref=" << ref << " rb_state=" << ref->GetReadBarrierState()
134 ObjPtr<mirror::Reference> ref = DequeuePendingReference();
135 mirror::HeapReference<mirror::Object>* referent_addr = ref->GetReferentReferenceAddr();
141 ref->ClearReferent<true>();
143 ref->ClearReferent<false>();
145 cleared_references->EnqueueReference(ref);
149 DisableReadBarrierForReference(ref);
156 ObjPtr<mirror::FinalizerReference> ref = DequeuePendingReference()->AsFinalizerReference();
157 mirror::HeapReference<mirror::Object>* referent_addr = ref->GetReferentReferenceAddr();
164 ref->SetZombie<true>(forward_address);
165 ref->ClearReferent<true>();
167 ref->SetZombie<false>(forward_address);
168 ref->ClearReferent<false>();
170 cleared_references->EnqueueReference(ref);
174 DisableReadBarrierForReference(ref->AsReference());
183 ObjPtr<mirror::Reference> ref = head;
185 mirror::HeapReference<mirror::Object>* referent_addr = ref->GetReferentReferenceAddr();
187 // do_atomic_update is false because mutators can't access the referent due to the weak ref
191 ref = ref->GetPendingNext();
192 } while (LIKELY(ref != head));