From f3b2a5d5ffe1a415890604c5bce119a175ace3f2 Mon Sep 17 00:00:00 2001 From: Hongguang Date: Tue, 25 Jan 2022 20:20:30 -0800 Subject: [PATCH] Refine SharedFilter close() to avoid random crash Bug: 205763272 Fix: 205763272 Test: atest CtsTvTestCases Change-Id: Ieee0d07fefa902d832745b040b9144e02fe9ba56 --- .../media/tv/tuner/filter/SharedFilter.java | 14 ++++++++++++++ media/jni/android_media_tv_Tuner.cpp | 1 + 2 files changed, 15 insertions(+) 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 {