diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 657c9eff10341..3cf9b03708235 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 setTuner(JNIEnv *env, jobject thiz, const sp &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 tuner = getTuner(env, thiz); + setTuner(env, thiz, NULL); return (jint) tuner->close(); }