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__);