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

Commit ae0aa2bc authored by Vicky Sehrawat's avatar Vicky Sehrawat Committed by Steve Kondik
Browse files

libaudioeffect_jni: GREF leak fix for JB

- Excessive JNI global reference in AudioEffects.
- Global references created during native setup
  are not deleted.
- Global references are deleted in setup failure
  and during native release.

Change-Id: I302b7f8de7189f85fd07167b950f85795ffc5ef1
CRs-fixed: 413633
parent b4b491f9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -407,6 +407,8 @@ setup_failure:
    env->SetIntField(thiz, fields.fidNativeAudioEffect, 0);

    if (lpJniStorage) {
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.audioEffect_class);
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.audioEffect_ref);
        delete lpJniStorage;
    }
    env->SetIntField(thiz, fields.fidJniData, 0);
@@ -439,6 +441,9 @@ static void android_media_AudioEffect_native_finalize(JNIEnv *env, jobject thiz
    AudioEffectJniStorage* lpJniStorage = (AudioEffectJniStorage *)env->GetIntField(
        thiz, fields.fidJniData);
    if (lpJniStorage) {
        // delete global refs created in native_setup
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.audioEffect_class);
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.audioEffect_ref);
        ALOGV("deleting pJniStorage: %x\n", (int)lpJniStorage);
        delete lpJniStorage;
    }
+5 −0
Original line number Diff line number Diff line
@@ -380,6 +380,8 @@ setup_failure:
    env->SetIntField(thiz, fields.fidNativeVisualizer, 0);

    if (lpJniStorage) {
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.visualizer_class);
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.visualizer_ref);
        delete lpJniStorage;
    }
    env->SetIntField(thiz, fields.fidJniData, 0);
@@ -403,6 +405,9 @@ static void android_media_visualizer_native_finalize(JNIEnv *env, jobject thiz)
    visualizerJniStorage* lpJniStorage = (visualizerJniStorage *)env->GetIntField(
        thiz, fields.fidJniData);
    if (lpJniStorage) {
        // delete global refs created in native_setup
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.visualizer_class);
        env->DeleteGlobalRef(lpJniStorage->mCallbackData.visualizer_ref);
        ALOGV("deleting pJniStorage: %x\n", (int)lpJniStorage);
        delete lpJniStorage;
    }