summaryrefslogtreecommitdiff
path: root/libs/gui/DisplayEventReceiver.cpp
diff options
context:
space:
mode:
author Ady Abraham <adyabr@google.com> 2022-02-08 19:36:37 -0800
committer Ady Abraham <adyabr@google.com> 2022-02-09 03:42:48 +0000
commit745f7b59ae19400240af4f390ea3c7f7a962a497 (patch)
tree64bb35a6d4cd34039929fd0299c0892a51a2f5b3 /libs/gui/DisplayEventReceiver.cpp
parente8c55433daa227e0c2de559d5ac8931b2dc22788 (diff)
DisplayEventReceiver: improve error handling
Reset the state in case of a binder error and log the error. Bug: 213926330 Test: boot Change-Id: I1b926d08689d9d6e4b382ce18e4a5ecb9156e564
Diffstat (limited to 'libs/gui/DisplayEventReceiver.cpp')
-rw-r--r--libs/gui/DisplayEventReceiver.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/libs/gui/DisplayEventReceiver.cpp b/libs/gui/DisplayEventReceiver.cpp
index b916e48f79..1bef2b7893 100644
--- a/libs/gui/DisplayEventReceiver.cpp
+++ b/libs/gui/DisplayEventReceiver.cpp
@@ -39,7 +39,13 @@ DisplayEventReceiver::DisplayEventReceiver(
mEventConnection = sf->createDisplayEventConnection(vsyncSource, eventRegistration);
if (mEventConnection != nullptr) {
mDataChannel = std::make_unique<gui::BitTube>();
- mEventConnection->stealReceiveChannel(mDataChannel.get());
+ const auto status = mEventConnection->stealReceiveChannel(mDataChannel.get());
+ if (!status.isOk()) {
+ ALOGE("stealReceiveChannel failed: %s", status.toString8().c_str());
+ mInitError = std::make_optional<status_t>(status.transactionError());
+ mDataChannel.reset();
+ mEventConnection.clear();
+ }
}
}
}
@@ -50,12 +56,11 @@ DisplayEventReceiver::~DisplayEventReceiver() {
status_t DisplayEventReceiver::initCheck() const {
if (mDataChannel != nullptr)
return NO_ERROR;
- return NO_INIT;
+ return mInitError.has_value() ? mInitError.value() : NO_INIT;
}
int DisplayEventReceiver::getFd() const {
- if (mDataChannel == nullptr)
- return NO_INIT;
+ if (mDataChannel == nullptr) return mInitError.has_value() ? mInitError.value() : NO_INIT;
return mDataChannel->getFd();
}
@@ -68,7 +73,7 @@ status_t DisplayEventReceiver::setVsyncRate(uint32_t count) {
mEventConnection->setVsyncRate(count);
return NO_ERROR;
}
- return NO_INIT;
+ return mInitError.has_value() ? mInitError.value() : NO_INIT;
}
status_t DisplayEventReceiver::requestNextVsync() {
@@ -76,7 +81,7 @@ status_t DisplayEventReceiver::requestNextVsync() {
mEventConnection->requestNextVsync();
return NO_ERROR;
}
- return NO_INIT;
+ return mInitError.has_value() ? mInitError.value() : NO_INIT;
}
ssize_t DisplayEventReceiver::getEvents(DisplayEventReceiver::Event* events,