Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c86d34a9 authored by Henry Fang's avatar Henry Fang Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: I78dc795490b8df139cda241be12fcbbbaf2fbb3b
parents 4ba8fde9 e42498a5
Loading
Loading
Loading
Loading
+14 −7
Original line number Original line Diff line number Diff line
@@ -287,8 +287,11 @@ Dvr::~Dvr() {
jint Dvr::close() {
jint Dvr::close() {
    Result r = mDvrSp->close();
    Result r = mDvrSp->close();
    if (r == Result::SUCCESS) {
    if (r == Result::SUCCESS) {
        if (mDvrMQEventFlag != nullptr) {
            EventFlag::deleteEventFlag(&mDvrMQEventFlag);
            EventFlag::deleteEventFlag(&mDvrMQEventFlag);
        }
        }
        mDvrMQ = nullptr;
    }
    return (jint) r;
    return (jint) r;
}
}


@@ -723,14 +726,16 @@ 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) {
        if (mFilterMQEventFlag != nullptr) {
            EventFlag::deleteEventFlag(&mFilterMQEventFlag);
            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) {