From b5066245365e932775ca6087cd74e53efa364642 Mon Sep 17 00:00:00 2001 From: Michael Chock Date: Tue, 6 Aug 2013 15:21:10 -0700 Subject: [PATCH] Avoid restrictive locking around EGL calls Do not use critical section variants of JNI array mapping operations when making EGL calls. They impose unnecessary restrictions on the EGL implementation that can lead to intermittent crashes. Using the non-critical variants makes no detectable performance difference. Change-Id: I4ef643f1a7fcdc5995538ff9d543f43f33c8e412 --- core/jni/com_google_android_gles_jni_EGLImpl.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp index 3035d15538b59..3d421d5e47f70 100644 --- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp +++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp @@ -107,7 +107,7 @@ static bool validAttribList(JNIEnv *_env, jintArray attrib_list) { static jint* beginNativeAttribList(JNIEnv *_env, jintArray attrib_list) { if (attrib_list != NULL) { - return (jint *)_env->GetPrimitiveArrayCritical(attrib_list, (jboolean *)0); + return _env->GetIntArrayElements(attrib_list, (jboolean *)0); } else { return(jint*) gNull_attrib_base; } @@ -115,7 +115,7 @@ static jint* beginNativeAttribList(JNIEnv *_env, jintArray attrib_list) { static void endNativeAttributeList(JNIEnv *_env, jintArray attrib_list, jint* attrib_base) { if (attrib_list != NULL) { - _env->ReleasePrimitiveArrayCritical(attrib_list, attrib_base, JNI_ABORT); + _env->ReleaseIntArrayElements(attrib_list, attrib_base, JNI_ABORT); } } @@ -154,9 +154,9 @@ static jboolean jni_eglQueryContext(JNIEnv *_env, jobject _this, jobject display EGLBoolean success = EGL_FALSE; int len = _env->GetArrayLength(value); if (len) { - jint* base = (jint *)_env->GetPrimitiveArrayCritical(value, (jboolean *)0); + jint* base = _env->GetIntArrayElements(value, (jboolean *)0); success = eglQueryContext(dpy, ctx, attribute, base); - _env->ReleasePrimitiveArrayCritical(value, base, JNI_ABORT); + _env->ReleaseIntArrayElements(value, base, JNI_ABORT); } return EglBoolToJBool(success); } @@ -174,9 +174,9 @@ static jboolean jni_eglQuerySurface(JNIEnv *_env, jobject _this, jobject display EGLBoolean success = EGL_FALSE; int len = _env->GetArrayLength(value); if (len) { - jint* base = (jint *)_env->GetPrimitiveArrayCritical(value, (jboolean *)0); + jint* base = _env->GetIntArrayElements(value, (jboolean *)0); success = eglQuerySurface(dpy, sur, attribute, base); - _env->ReleasePrimitiveArrayCritical(value, base, JNI_ABORT); + _env->ReleaseIntArrayElements(value, base, JNI_ABORT); } return EglBoolToJBool(success); }