diff options
author | Henry Fang <quxiangfang@google.com> | 2021-07-08 14:31:03 -0700 |
---|---|---|
committer | Henry Fang <quxiangfang@google.com> | 2021-07-08 19:56:26 -0700 |
commit | f3e53d082c1ea71dd2778c1ff98e9252f70bdd8c (patch) | |
tree | 952af043177cabbac56019d47479d2311c4c0404 | |
parent | 14fe934578135a1b9a5f42e3ade65b15f7155839 (diff) |
fix memory leak in initilization and finalization
bug: 193107250
Test: Manual
Change-Id: I5b57ee6467d39765fab15d7a2b4b8e7c09ad8f3a
-rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 657c9eff1034..3cf9b0370823 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -339,6 +339,12 @@ MediaEvent::~MediaEvent() { if (pC2Buffer != NULL) { pC2Buffer->unregisterOnDestroyNotify(&DestroyCallback, this); } + + if (mLinearBlockObj != NULL) { + env->DeleteWeakGlobalRef(mLinearBlockObj); + mLinearBlockObj = NULL; + } + mFilterClient = NULL; } @@ -2450,7 +2456,10 @@ static sp<JTuner> setTuner(JNIEnv *env, jobject thiz, const sp<JTuner> &tuner) { if (old != NULL) { old->decStrong(thiz); } - env->SetLongField(thiz, gFields.tunerContext, (jlong)tuner.get()); + + if (tuner != NULL) { + env->SetLongField(thiz, gFields.tunerContext, (jlong)tuner.get()); + } return old; } @@ -4042,6 +4051,7 @@ static jint android_media_tv_Tuner_open_demux(JNIEnv* env, jobject thiz, jint ha static jint android_media_tv_Tuner_close_tuner(JNIEnv* env, jobject thiz) { sp<JTuner> tuner = getTuner(env, thiz); + setTuner(env, thiz, NULL); return (jint) tuner->close(); } |