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

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

Change-Id: I747f2bb48f1464e996c6fd460f51b3709f6d471a
This commit is contained in:
Henry Fang
2021-03-16 18:39:36 +00:00
committed by Automerger Merge Worker

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) {