Tuner FW: clean up Dvr/Filter message-queue resources upon close

Bug: 182546718
Signed-off-by: Pierre Couillaud <pierre@broadcom.com>
Change-Id: I89374a334e86dd934a972989c318b5222f4ce769
Merged-In: Iea28f07a0800cbab88a1348fa7ae21ac17e1cfd8
This commit is contained in:
Pierre Couillaud
2021-03-12 13:50:04 -08:00
committed by Henry Fang
parent 0ebddf5fdc
commit ee14d5ea42

View File

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