From 9b85a194e4118819b2bd9ab0bfb489f78ae1b529 Mon Sep 17 00:00:00 2001 From: Brian Lindahl Date: Mon, 10 May 2021 09:56:33 +0000 Subject: 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 --- libs/gui/SurfaceComposerClient.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'libs/gui/SurfaceComposerClient.cpp') 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(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(this)); IInterface::asBinder(mComposerService)->linkToDeath(mDeathObserver); + return true; } /*static*/ sp 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; } -- cgit v1.2.3-59-g8ed1b