diff options
Diffstat (limited to 'runtime/mirror/object.h')
-rw-r--r-- | runtime/mirror/object.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/runtime/mirror/object.h b/runtime/mirror/object.h index 0ba545becc..a491a6a3e3 100644 --- a/runtime/mirror/object.h +++ b/runtime/mirror/object.h @@ -137,11 +137,18 @@ class MANAGED LOCKABLE Object { REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_); + // Returns a nonzero value that fits into lockword slot. int32_t IdentityHashCode() REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Locks::thread_list_lock_, !Locks::thread_suspend_count_lock_); + // Identical to the above, but returns 0 if monitor inflation would otherwise be needed. + int32_t IdentityHashCodeNoInflation() + REQUIRES_SHARED(Locks::mutator_lock_) + REQUIRES(!Locks::thread_list_lock_, + !Locks::thread_suspend_count_lock_); + static constexpr MemberOffset MonitorOffset() { return OFFSET_OF_OBJECT_MEMBER(Object, monitor_); } @@ -719,6 +726,12 @@ class MANAGED LOCKABLE Object { REQUIRES_SHARED(Locks::mutator_lock_); private: + template<bool kAllowInflation> + int32_t IdentityHashCodeHelper() + REQUIRES_SHARED(Locks::mutator_lock_) + REQUIRES(!Locks::thread_list_lock_, + !Locks::thread_suspend_count_lock_); + // Get a field with acquire semantics. template<typename kSize> ALWAYS_INLINE kSize GetFieldAcquire(MemberOffset field_offset) |