From 209500045607e6a7d363ee5c1010478a058c3e0a Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Thu, 18 Jun 2020 14:56:58 -0700 Subject: SF: Guard Power HAL access with lock Adds a lock around Power HAL access to prevent concurrent access from multiple binder threads. Bug: 158270361 Test: build, boot Change-Id: I7262cdb8addf72ef0657f5b9394e1ba324e3e43f --- services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp | 2 ++ services/surfaceflinger/DisplayHardware/PowerAdvisor.h | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp b/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp index 1d8179c9ac..4b4c050f8e 100644 --- a/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp +++ b/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp @@ -85,6 +85,7 @@ void PowerAdvisor::setExpensiveRenderingExpected(DisplayId displayId, bool expec const bool expectsExpensiveRendering = !mExpensiveDisplays.empty(); if (mNotifiedExpensiveRendering != expectsExpensiveRendering) { + std::lock_guard lock(mPowerHalMutex); HalWrapper* const halWrapper = getPowerHal(); if (halWrapper == nullptr) { return; @@ -108,6 +109,7 @@ void PowerAdvisor::notifyDisplayUpdateImminent() { } if (mSendUpdateImminent.load()) { + std::lock_guard lock(mPowerHalMutex); HalWrapper* const halWrapper = getPowerHal(); if (halWrapper == nullptr) { return; diff --git a/services/surfaceflinger/DisplayHardware/PowerAdvisor.h b/services/surfaceflinger/DisplayHardware/PowerAdvisor.h index 34e63e725b..95eb0e2bb7 100644 --- a/services/surfaceflinger/DisplayHardware/PowerAdvisor.h +++ b/services/surfaceflinger/DisplayHardware/PowerAdvisor.h @@ -19,6 +19,8 @@ #include #include +#include + #include "../Scheduler/OneShotTimer.h" #include "DisplayIdentification.h" @@ -56,10 +58,11 @@ public: void notifyDisplayUpdateImminent() override; private: - HalWrapper* getPowerHal(); + HalWrapper* getPowerHal() REQUIRES(mPowerHalMutex); + bool mReconnectPowerHal GUARDED_BY(mPowerHalMutex) = false; + std::mutex mPowerHalMutex; std::atomic_bool mBootFinished = false; - bool mReconnectPowerHal = false; std::unordered_set mExpensiveDisplays; bool mNotifiedExpensiveRendering = false; -- cgit v1.2.3-59-g8ed1b