passthrough: only open /dev/occX during the operation

The file handle was left open constantly, resulting in dead file handles
when FSI is rescanned.

Change-Id: I1ca8b330131eaad3e3672f5e8fbc3b994e8c34d6
Signed-off-by: Eddie James <eajames@us.ibm.com>
diff --git a/occ_pass_through.cpp b/occ_pass_through.cpp
index 4a7057b..424cc22 100644
--- a/occ_pass_through.cpp
+++ b/occ_pass_through.cpp
@@ -35,6 +35,12 @@
     using namespace phosphor::logging;
     using namespace sdbusplus::org::open_power::OCC::Device::Error;
 
+    if (!occActive)
+    {
+         log<level::INFO>("OCC is inactive; cannot perform pass-through");
+         return;
+    }
+
     fd = open(devicePath.c_str(), O_RDWR | O_NONBLOCK);
     if (fd < 0)
     {
@@ -53,6 +59,7 @@
     if (fd >= 0)
     {
         close(fd);
+        fd = -1;
     }
 }
 
@@ -63,6 +70,14 @@
 
     std::vector<int32_t> response {};
 
+    openDevice();
+
+    if (fd < 0)
+    {
+        // OCC is inactive; empty response
+        return response;
+    }
+
     // OCC only understands [bytes] so need array of bytes. Doing this
     // because rest-server currently treats all int* as 32 bit integer.
     std::vector<uint8_t> cmdInBytes;
@@ -115,6 +130,8 @@
         }
     }
 
+    closeDevice();
+
     return response;
 }
 
@@ -131,10 +148,11 @@
         // Extract the OccActive property
         if (sdbusplus::message::variant_ns::get<bool>(propertyMap->second))
         {
-            this->openDevice();
+            occActive = true;
         }
         else
         {
+            occActive = false;
             this->closeDevice();
         }
     }