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

Commit 9abc998f 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.

(cherry picked from commit a04a2bf4563dc20c52f4d4239e01f80b220077a5)
CRs-fixed: 413633

Change-Id: Ia4340a2128850101b394e00c8e1db9db49f516fd
parent c36a70aa
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
@@ -381,6 +381,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);
@@ -404,6 +406,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;
    }