diff options
author | 2019-12-02 18:54:13 +0000 | |
---|---|---|
committer | 2019-12-02 20:35:34 +0000 | |
commit | bc19b7559e887310664a4c86ad3eb3b47749b087 (patch) | |
tree | 820961050c6904f89d9bfe67f8b936f2a5ec9d9c /runtime/mirror/class_ext.h | |
parent | 0a19e212e56fc6fe2809b58072ddcf4acfdc568d (diff) |
Revert^2 "Make opaque-jni-ids:swapable more efficient"
This reverts commit 42c52f53b3c85b5e3c984bca8eaec2e03893dd2e.
This un-reverts commit 4e7dd70e3ee7a25089bed791df8865966cb4b837.
We were missing some null-checks that caused a null-pointer
dereference to occur if one tried to get a jmethodID for an obsolete
method when we start with index-ids.
Reason for revert: Fixes issue causing failure in art-jit config.
Test: Manual
Test: count-fields.py
Bug: 134162467
Change-Id: Ie36c7a4edb70f96655b3b85e5f5eaa6bf47f5cc7
Diffstat (limited to 'runtime/mirror/class_ext.h')
-rw-r--r-- | runtime/mirror/class_ext.h | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/runtime/mirror/class_ext.h b/runtime/mirror/class_ext.h index eb4047be24..fa4e87ae3c 100644 --- a/runtime/mirror/class_ext.h +++ b/runtime/mirror/class_ext.h @@ -48,30 +48,48 @@ class MANAGED ClassExt : public Object { template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> EnsureInstanceJFieldIDsArrayPresent(size_t count) + bool EnsureInstanceJFieldIDsArrayPresent(size_t count) REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> GetInstanceJFieldIDs() REQUIRES_SHARED(Locks::mutator_lock_); + ObjPtr<PointerArray> GetInstanceJFieldIDsPointerArray() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + ObjPtr<Object> GetInstanceJFieldIDs() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + bool HasInstanceFieldPointerIdMarker() REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> EnsureStaticJFieldIDsArrayPresent(size_t count) + bool EnsureStaticJFieldIDsArrayPresent(size_t count) REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> GetStaticJFieldIDs() REQUIRES_SHARED(Locks::mutator_lock_); + ObjPtr<PointerArray> GetStaticJFieldIDsPointerArray() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + ObjPtr<Object> GetStaticJFieldIDs() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + bool HasStaticFieldPointerIdMarker() REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> EnsureJMethodIDsArrayPresent(size_t count) + bool EnsureJMethodIDsArrayPresent(size_t count) REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> GetJMethodIDs() REQUIRES_SHARED(Locks::mutator_lock_); + ObjPtr<Object> GetJMethodIDs() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + ObjPtr<PointerArray> GetJMethodIDsPointerArray() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + bool HasMethodPointerIdMarker() REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> @@ -79,6 +97,10 @@ class MANAGED ClassExt : public Object { ObjPtr<Object> GetOriginalDexFile() REQUIRES_SHARED(Locks::mutator_lock_); + // Used to manually initialize the ext-ids arrays for the ClassExt associated + // with the Class<ClassExt>. This simplifies the id allocation path. + void SetIdsArraysForClassExtExtData(ObjPtr<Object> marker) REQUIRES_SHARED(Locks::mutator_lock_); + void SetOriginalDexFile(ObjPtr<Object> bytes) REQUIRES_SHARED(Locks::mutator_lock_); uint16_t GetPreRedefineClassDefIndex() REQUIRES_SHARED(Locks::mutator_lock_) { @@ -129,7 +151,7 @@ class MANAGED ClassExt : public Object { private: template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - ObjPtr<PointerArray> EnsureJniIdsArrayPresent(MemberOffset off, size_t count) + bool EnsureJniIdsArrayPresent(MemberOffset off, size_t count) REQUIRES_SHARED(Locks::mutator_lock_); // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses". |