summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2009-07-17 12:05:31 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2009-07-17 12:05:31 -0700
commit4bac5a3928d57ac193141eb6d45f3b39200d27de (patch)
treebd31b01a276746d5ee3fd6922a03ef1a158cca33 /core/jni
parent19e53f7ae506ccb294f46a36c70d7f3154b258ad (diff)
downloadframeworks_base-4bac5a3928d57ac193141eb6d45f3b39200d27de.zip
frameworks_base-4bac5a3928d57ac193141eb6d45f3b39200d27de.tar.gz
frameworks_base-4bac5a3928d57ac193141eb6d45f3b39200d27de.tar.bz2
Fix global ref leak in android.media.AudioRecord. Delete global refs
to the native AudioRecord pointer and the callback cookie (for native to Java calls) in the finalize() function and when an error occurs during the allocation of the native resources.
Diffstat (limited to 'core/jni')
-rw-r--r--core/jni/android_media_AudioRecord.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index e71e348..44a9e8c 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -212,8 +212,10 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
// failure:
native_init_failure:
+ env->DeleteGlobalRef(lpCallbackData->audioRecord_class);
+ env->DeleteGlobalRef(lpCallbackData->audioRecord_ref);
delete lpCallbackData;
-
+
native_track_failure:
delete lpRecorder;
@@ -274,6 +276,8 @@ static void android_media_AudioRecord_finalize(JNIEnv *env, jobject thiz) {
thiz, javaAudioRecordFields.nativeCallbackCookie);
if (lpCookie) {
LOGV("deleting lpCookie: %x\n", (int)lpCookie);
+ env->DeleteGlobalRef(lpCookie->audioRecord_class);
+ env->DeleteGlobalRef(lpCookie->audioRecord_ref);
delete lpCookie;
}