Merge "Tuner FW: clean up Dvr/Filter message-queue resources upon close" am: e42498a501

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1634480

Change-Id: I78dc795490b8df139cda241be12fcbbbaf2fbb3b
This commit is contained in:
Henry Fang
2021-03-16 18:04:44 +00:00
committed by Automerger Merge Worker

View File

@@ -287,7 +287,10 @@ Dvr::~Dvr() {
jint Dvr::close() { jint Dvr::close() {
Result r = mDvrSp->close(); Result r = mDvrSp->close();
if (r == Result::SUCCESS) { if (r == Result::SUCCESS) {
EventFlag::deleteEventFlag(&mDvrMQEventFlag); if (mDvrMQEventFlag != nullptr) {
EventFlag::deleteEventFlag(&mDvrMQEventFlag);
}
mDvrMQ = nullptr;
} }
return (jint) r; return (jint) r;
} }
@@ -723,13 +726,15 @@ Filter::~Filter() {
env->DeleteWeakGlobalRef(mFilterObj); env->DeleteWeakGlobalRef(mFilterObj);
mFilterObj = NULL; mFilterObj = NULL;
EventFlag::deleteEventFlag(&mFilterMQEventFlag);
} }
int Filter::close() { int Filter::close() {
Result r = mFilterSp->close(); Result r = mFilterSp->close();
if (r == Result::SUCCESS) { if (r == Result::SUCCESS) {
EventFlag::deleteEventFlag(&mFilterMQEventFlag); if (mFilterMQEventFlag != nullptr) {
EventFlag::deleteEventFlag(&mFilterMQEventFlag);
}
mFilterMQ = nullptr;
} }
return (int)r; return (int)r;
} }
@@ -3050,6 +3055,9 @@ static jint android_media_tv_Tuner_configure_filter(
filterSp->mFilterMQ = std::make_unique<MQ>(filterMQDesc, true); filterSp->mFilterMQ = std::make_unique<MQ>(filterMQDesc, true);
EventFlag::createEventFlag( EventFlag::createEventFlag(
filterSp->mFilterMQ->getEventFlagWord(), &(filterSp->mFilterMQEventFlag)); filterSp->mFilterMQ->getEventFlagWord(), &(filterSp->mFilterMQEventFlag));
} else {
filterSp->mFilterMQ = nullptr;
filterSp->mFilterMQEventFlag = nullptr;
} }
} }
return (jint) getQueueDescResult; return (jint) getQueueDescResult;
@@ -3137,13 +3145,12 @@ static jint android_media_tv_Tuner_read_filter_fmq(
} }
static jint android_media_tv_Tuner_close_filter(JNIEnv *env, jobject filter) { static jint android_media_tv_Tuner_close_filter(JNIEnv *env, jobject filter) {
sp<IFilter> iFilterSp = getFilter(env, filter)->getIFilter(); sp<Filter> filterSp = getFilter(env, filter);
if (iFilterSp == NULL) { if (filterSp == NULL) {
ALOGD("Failed to close filter: filter not found"); ALOGD("Failed to close filter: filter not found");
return (jint) Result::NOT_INITIALIZED; return (jint) Result::NOT_INITIALIZED;
} }
Result r = iFilterSp->close(); return filterSp->close();
return (jint) r;
} }
static sp<TimeFilter> getTimeFilter(JNIEnv *env, jobject filter) { static sp<TimeFilter> getTimeFilter(JNIEnv *env, jobject filter) {