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

Commit 88d37aff authored by Hongguang's avatar Hongguang
Browse files

Detach callbacks when closing filter.

Bug: 218228680
Test: atest android.media.tv.tuner.cts 20 time
Change-Id: Ieb819e980a9db9b0a1d2b7c13079f8686ad2e509
parent 3eeeda39
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -337,6 +337,9 @@ TunerFilter::~TunerFilter() {
        }
    }

    if (mFilterCallback != nullptr) {
        mFilterCallback->detachCallbacks();
    }
    auto res = mFilter->close();
    mFilter = nullptr;
    mStarted = false;
@@ -470,6 +473,12 @@ void TunerFilter::FilterCallback::detachSharedFilterCallback() {
    }
}

void TunerFilter::FilterCallback::detachCallbacks() {
    Mutex::Autolock _l(mCallbackLock);
    mOriginalCallback = nullptr;
    mTunerFilterCallback = nullptr;
}

}  // namespace tuner
}  // namespace tv
}  // namespace media
+1 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ public:
        void sendSharedFilterStatus(int32_t status);
        void attachSharedFilterCallback(const shared_ptr<ITunerFilterCallback>& in_cb);
        void detachSharedFilterCallback();
        void detachCallbacks();

    private:
        shared_ptr<ITunerFilterCallback> mTunerFilterCallback;
+9 −0
Original line number Diff line number Diff line
@@ -510,6 +510,9 @@ TunerHidlFilter::~TunerHidlFilter() {
        }
    }

    if (mFilterCallback != nullptr) {
        mFilterCallback->detachCallbacks();
    }
    HidlResult res = mFilter->close();
    mFilter = nullptr;
    mFilter_1_1 = nullptr;
@@ -970,6 +973,12 @@ void TunerHidlFilter::FilterCallback::detachSharedFilterCallback() {
    }
}

void TunerHidlFilter::FilterCallback::detachCallbacks() {
    Mutex::Autolock _l(mCallbackLock);
    mOriginalCallback = nullptr;
    mTunerFilterCallback = nullptr;
}

/////////////// FilterCallback Helper Methods ///////////////////////
void TunerHidlFilter::FilterCallback::getAidlFilterEvent(
        const vector<HidlDemuxFilterEvent::Event>& events,
+1 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ public:
        void sendSharedFilterStatus(int32_t status);
        void attachSharedFilterCallback(const shared_ptr<ITunerFilterCallback>& in_cb);
        void detachSharedFilterCallback();
        void detachCallbacks();

    private:
        void getAidlFilterEvent(const vector<HidlDemuxFilterEvent::Event>& events,