power-libperfmgr: simply wait if idle state node is not present
Change-Id: I93dd97e5437761d2d969f93a5af0cae864fd0a65
Signed-off-by: Jesse Chan <jc@lineageos.org>
diff --git a/aidl/power-libperfmgr/InteractionHandler.cpp b/aidl/power-libperfmgr/InteractionHandler.cpp
index 6461466..23ced5c 100644
--- a/aidl/power-libperfmgr/InteractionHandler.cpp
+++ b/aidl/power-libperfmgr/InteractionHandler.cpp
@@ -65,15 +65,14 @@
if (mState != INTERACTION_STATE_UNINITIALIZED)
return true;
- int fd = fb_idle_open();
- if (fd < 0)
- return false;
- mIdleFd = fd;
+ mIdleFd = fb_idle_open();
mEventFd = eventfd(0, EFD_NONBLOCK);
if (mEventFd < 0) {
ALOGE("Unable to create event fd (%d)", errno);
- close(mIdleFd);
+ if (mIdleFd >= 0) {
+ close(mIdleFd);
+ }
return false;
}
@@ -96,7 +95,9 @@
mThread->join();
close(mEventFd);
- close(mIdleFd);
+ if (mIdleFd >= 0) {
+ close(mIdleFd);
+ }
}
void InteractionHandler::PerfLock() {
@@ -212,6 +213,18 @@
return;
}
+ if (mIdleFd < 0) {
+ ret = poll(pfd, 1, timeout_ms);
+ if (ret > 0) {
+ ALOGV("%s: wait for duration aborted", __func__);
+ return;
+ } else if (ret < 0) {
+ ALOGE("%s: Error on waiting for duration (%zd)", __func__, ret);
+ return;
+ }
+ return;
+ }
+
ret = pread(mIdleFd, data, sizeof(data), 0);
if (!ret) {
ALOGE("%s: Unexpected EOF!", __func__);