diff --git a/power-libperfmgr/PowerHintSession.cpp b/power-libperfmgr/PowerHintSession.cpp index 2dbb464..1eb0172 100644 --- a/power-libperfmgr/PowerHintSession.cpp +++ b/power-libperfmgr/PowerHintSession.cpp @@ -263,14 +263,10 @@ ndk::ScopedAStatus PowerHintSession::close() { } // Remove the session from PowerSessionManager first to avoid racing. PowerSessionManager::getInstance()->removePowerSession(this); - setSessionUclampMin(0); - { - std::lock_guard guard(mSessionLock); - mSessionClosed.store(true); - } - mDescriptor->is_active.store(false); mEarlyBoostHandler->setSessionDead(); mStaleTimerHandler->setSessionDead(); + setSessionUclampMin(0); + mDescriptor->is_active.store(false); updateUniveralBoostMode(); return ndk::ScopedAStatus::ok(); } @@ -501,6 +497,7 @@ void PowerHintSession::StaleTimerHandler::updateTimer(time_point s } void PowerHintSession::StaleTimerHandler::handleMessage(const Message &) { + std::lock_guard guard(mClosedLock); if (mIsSessionDead) { return; } @@ -530,7 +527,7 @@ void PowerHintSession::StaleTimerHandler::handleMessage(const Message &) { } void PowerHintSession::StaleTimerHandler::setSessionDead() { - std::lock_guard guard(mStaleLock); + std::lock_guard guard(mClosedLock); mIsSessionDead = true; PowerHintMonitor::getInstance()->getLooper()->removeMessages(mSession->mStaleTimerHandler); } diff --git a/power-libperfmgr/PowerHintSession.h b/power-libperfmgr/PowerHintSession.h index d922744..33c6ed7 100644 --- a/power-libperfmgr/PowerHintSession.h +++ b/power-libperfmgr/PowerHintSession.h @@ -103,7 +103,7 @@ class PowerHintSession : public BnPowerHintSession { private: PowerHintSession *mSession; - std::mutex mStaleLock; + std::mutex mClosedLock; std::mutex mMessageLock; std::atomic> mStaleTime; std::atomic mIsMonitoring;