diff options
| author | 2014-05-09 12:21:15 -0700 | |
|---|---|---|
| committer | 2014-05-09 12:21:15 -0700 | |
| commit | bfff21aaa05d4fce39481cf7899f7639eb7fd66d (patch) | |
| tree | 489efb8743f63ccb1e45197f4ae4c6e67cb9c1c4 /runtime/mirror/reference.h | |
| parent | 25023c744c4388a6459b21cc3babf8c602b024a2 (diff) | |
Reference::GetReferent() calls by GC should not trigger read barriers.
Otherwise, GC's reference processing would turn all referents alive
via read barriers, which is incorrect.
Bug: 12687968
Change-Id: I1463365981d55fa74a7bb207dd4a16aeec007f8b
Diffstat (limited to 'runtime/mirror/reference.h')
| -rw-r--r-- | runtime/mirror/reference.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/runtime/mirror/reference.h b/runtime/mirror/reference.h index cf65d2093b..0b6e759097 100644 --- a/runtime/mirror/reference.h +++ b/runtime/mirror/reference.h @@ -42,8 +42,10 @@ class MANAGED Reference : public Object { return OFFSET_OF_OBJECT_MEMBER(Reference, referent_); } + template<ReadBarrierOption kReadBarrierOption = kWithReadBarrier> Object* GetReferent() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - return GetFieldObjectVolatile<Object>(ReferentOffset()); + return GetFieldObjectVolatile<Object, kDefaultVerifyFlags, kReadBarrierOption>( + ReferentOffset()); } template<bool kTransactionActive> void SetReferent(Object* referent) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { |