diff options
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android_util_Binder.cpp | 2 | ||||
-rw-r--r-- | core/jni/com_android_internal_content_NativeLibraryHelper.cpp | 31 |
2 files changed, 22 insertions, 11 deletions
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index c139cd7..9718fd7 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -144,7 +144,7 @@ static volatile int32_t gNumDeathRefs = 0; static void incRefsCreated(JNIEnv* env) { int old = android_atomic_inc(&gNumRefsCreated); - if (old == 200) { + if (old == 2000) { android_atomic_and(0, &gNumRefsCreated); env->CallStaticVoidMethod(gBinderInternalOffsets.mClass, gBinderInternalOffsets.mForceGc); diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp index 67261d3..c830ffd 100644 --- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp +++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp @@ -499,17 +499,28 @@ static int findSupportedAbi(JNIEnv *env, jlong apkHandle, jobjectArray supported } } } - int asset_status = NO_NATIVE_LIBRARIES; - int rc = initAssetsVerifierLib(); - if (rc == LIB_INITED_AND_SUCCESS) { - asset_status = GetAssetsStatusFunc(zipFile, supportedAbis, numAbis); - } else { - ALOGV("Failed to load assets verifier: %d", rc); - } - if (asset_status == 1) { - // override the status if asset_status hints at 32-bit abi - status = 1; + if(status <= 0) { + // Scan the 'assets' folder only if + // the abi (after scanning the lib folder) + // is not already set to 32-bit (i.e '1' or '2'). + + int asset_status = NO_NATIVE_LIBRARIES; + int rc = initAssetsVerifierLib(); + + if (rc == LIB_INITED_AND_SUCCESS) { + asset_status = GetAssetsStatusFunc(zipFile, supportedAbis, numAbis); + } else { + ALOGV("Failed to load assets verifier: %d", rc); + } + if(asset_status >= 0) { + // Override the ABI only if + // 'asset_status' is a valid ABI (64-bit or 32-bit). + // This is to prevent cases where 'lib' folder + // has native libraries, but + // 'assets' folder has none. + status = asset_status; + } } for (int i = 0; i < numAbis; ++i) { |