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

Commit e519d11e authored by Vicky Sehrawat's avatar Vicky Sehrawat Committed by Linux Build Service Account
Browse files

audio: libaudioeffect_jni GREF leak fix

- 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: I3c90f3a00b2552b4b783375928afc94a7e441449
CRs-fixed: 413633
(cherry picked from commit f60e70097b84c4ef26eeb31024d52e5b1fc8aa64)
(cherry picked from commit 9c9279277ad10582ff3dcf5cad576d2d7f036569)
parent c72a166f
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
@@ -410,6 +410,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);
@@ -433,6 +435,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;
    }