From 82840c4ebaf98778c491ae8938d2125685f0cdf5 Mon Sep 17 00:00:00 2001 From: xiaomi/hanli Date: Wed, 19 Jul 2017 18:53:03 +0800 Subject: [PATCH] Fix local reference table overflow error. table dump: 241 of android.media.AudioMixPort (241 unique instances) 241 of android.media.AudioMixPortConfig (241 unique instances) 8 of android.media.AudioDevicePortConfig (8 unique instances) 8 of android.media.AudioDevicePort (8 unique instances) Test: Basic audio sanity Bug: 64554806 Change-Id: Ice7a866c6a336e54829266aedca2f01e7b75e34b Signed-off-by: xiaomi/hanli --- core/jni/android_media_AudioSystem.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index 6c3d5f1fcd115..e2f2737bcbde7 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -933,6 +933,7 @@ static jint convertAudioPortFromNative(JNIEnv *env, jintArray jFormats = NULL; jobjectArray jGains = NULL; jobject jHandle = NULL; + jobject jAudioPortConfig = NULL; jstring jDeviceName = NULL; bool useInMask; size_t numPositionMasks = 0; @@ -1111,7 +1112,6 @@ static jint convertAudioPortFromNative(JNIEnv *env, goto exit; } - jobject jAudioPortConfig; jStatus = convertAudioPortConfigFromNative(env, *jAudioPort, &jAudioPortConfig, @@ -1147,6 +1147,9 @@ exit: if (jHandle != NULL) { env->DeleteLocalRef(jHandle); } + if (jAudioPortConfig != NULL) { + env->DeleteLocalRef(jAudioPortConfig); + } return jStatus; } @@ -1218,12 +1221,15 @@ android_media_AudioSystem_listAudioPorts(JNIEnv *env, jobject clazz, } for (size_t i = 0; i < numPorts; i++) { - jobject jAudioPort; + jobject jAudioPort = NULL; jStatus = convertAudioPortFromNative(env, &jAudioPort, &nPorts[i]); if (jStatus != AUDIO_JAVA_SUCCESS) { goto exit; } env->CallBooleanMethod(jPorts, gArrayListMethods.add, jAudioPort); + if (jAudioPort != NULL) { + env->DeleteLocalRef(jAudioPort); + } } exit: