Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5066245 authored by Michael Chock's avatar Michael Chock Committed by Andy McFadden
Browse files

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
parent 21045126
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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);
}