summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceComposerClient.cpp
diff options
context:
space:
mode:
author Brian Lindahl <blindahl@google.com> 2021-05-10 09:56:33 +0000
committer Brian Lindahl <blindahl@google.com> 2021-05-21 09:30:13 +0000
commit9b85a194e4118819b2bd9ab0bfb489f78ae1b529 (patch)
treefe21d0baf7d8eb4831f63861bf9244fdbc5e292a /libs/gui/SurfaceComposerClient.cpp
parent807ae39c936ddbc410207e852ecc25803f2b17a2 (diff)
Add robustness for permissions errors to Surface APIs.
Test: Tested ag/14424498 via testHevcTranscodingWithFileDescriptor on Test: flame - ab/builds/forrest/run/L38000000884507245 Bug: 184903653 Bug: 184112407 Change-Id: I94dcaa31edcf0f810c6cf69ca6e73277470fa51f
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r--libs/gui/SurfaceComposerClient.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 808b731d8f..0656dae6fb 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -65,12 +65,12 @@ ComposerService::ComposerService()
connectLocked();
}
-void ComposerService::connectLocked() {
+bool ComposerService::connectLocked() {
const String16 name("SurfaceFlinger");
- while (getService(name, &mComposerService) != NO_ERROR) {
- usleep(250000);
+ mComposerService = waitForService<ISurfaceComposer>(name);
+ if (mComposerService == nullptr) {
+ return false; // fatal error or permission problem
}
- assert(mComposerService != nullptr);
// Create the death listener.
class DeathObserver : public IBinder::DeathRecipient {
@@ -86,15 +86,16 @@ void ComposerService::connectLocked() {
mDeathObserver = new DeathObserver(*const_cast<ComposerService*>(this));
IInterface::asBinder(mComposerService)->linkToDeath(mDeathObserver);
+ return true;
}
/*static*/ sp<ISurfaceComposer> ComposerService::getComposerService() {
ComposerService& instance = ComposerService::getInstance();
Mutex::Autolock _l(instance.mLock);
if (instance.mComposerService == nullptr) {
- ComposerService::getInstance().connectLocked();
- assert(instance.mComposerService != nullptr);
- ALOGD("ComposerService reconnected");
+ if (ComposerService::getInstance().connectLocked()) {
+ ALOGD("ComposerService reconnected");
+ }
}
return instance.mComposerService;
}