diff --git a/media/java/android/media/tv/tuner/filter/SharedFilter.java b/media/java/android/media/tv/tuner/filter/SharedFilter.java index 056c5d5472dd2..740ab9c45c83e 100644 --- a/media/java/android/media/tv/tuner/filter/SharedFilter.java +++ b/media/java/android/media/tv/tuner/filter/SharedFilter.java @@ -92,9 +92,21 @@ public final class SharedFilter implements AutoCloseable { synchronized (mCallbackLock) { if (mCallback != null) { mCallback.onFilterEvent(this, events); + } else { + for (FilterEvent event : events) { + if (event instanceof MediaEvent) { + ((MediaEvent)event).release(); + } + } } } }); + } else { + for (FilterEvent event : events) { + if (event instanceof MediaEvent) { + ((MediaEvent)event).release(); + } + } } } } @@ -187,6 +199,8 @@ public final class SharedFilter implements AutoCloseable { if (mIsClosed) { return; } + mCallback = null; + mExecutor = null; nativeSharedClose(); mIsClosed = true; } diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 68dd8d07750e2..9ed1ac0fa360f 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -4147,6 +4147,7 @@ static jint android_media_tv_Tuner_close_filter(JNIEnv *env, jobject filter) { Result r = filterClient->close(); filterClient->decStrong(filter); + filterClient = nullptr; if (shared) { env->SetLongField(filter, gFields.sharedFilterContext, 0); } else {