diff options
Diffstat (limited to 'runtime/mirror/reference-inl.h')
| -rw-r--r-- | runtime/mirror/reference-inl.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/runtime/mirror/reference-inl.h b/runtime/mirror/reference-inl.h index 039989bcb4..a449b41087 100644 --- a/runtime/mirror/reference-inl.h +++ b/runtime/mirror/reference-inl.h @@ -19,6 +19,8 @@ #include "reference.h" +#include "obj_ptr-inl.h" + namespace art { namespace mirror { @@ -27,6 +29,24 @@ inline uint32_t Reference::ClassSize(PointerSize pointer_size) { return Class::ComputeClassSize(false, vtable_entries, 2, 0, 0, 0, 0, pointer_size); } +template<bool kTransactionActive> +inline void Reference::SetReferent(ObjPtr<Object> referent) { + SetFieldObjectVolatile<kTransactionActive>(ReferentOffset(), referent); +} + +inline void Reference::SetPendingNext(ObjPtr<Reference> pending_next) { + if (Runtime::Current()->IsActiveTransaction()) { + SetFieldObject<true>(PendingNextOffset(), pending_next); + } else { + SetFieldObject<false>(PendingNextOffset(), pending_next); + } +} + +template<bool kTransactionActive> +inline void FinalizerReference::SetZombie(ObjPtr<Object> zombie) { + return SetFieldObjectVolatile<kTransactionActive>(ZombieOffset(), zombie); +} + } // namespace mirror } // namespace art |