diff --git a/tv/tuner/aidl/default/Filter.cpp b/tv/tuner/aidl/default/Filter.cpp index 345a984356..0a350571c2 100644 --- a/tv/tuner/aidl/default/Filter.cpp +++ b/tv/tuner/aidl/default/Filter.cpp @@ -88,7 +88,11 @@ void FilterCallbackScheduler::start() { } void FilterCallbackScheduler::stop() { - mIsRunning = false; + { + std::unique_lock lock(mLock); + mIsRunning = false; + mCv.notify_all(); + } if (mCallbackThread.joinable()) { mCallbackThread.join(); } @@ -113,6 +117,10 @@ void FilterCallbackScheduler::threadLoopOnce() { // okay to send data. mCv.wait(lock); } + if (!mIsRunning) { + lock.unlock(); + return; + } // condition_variable wait locks mutex on timeout / notify if (!mCallbackBuffer.empty()) {