nvidia-gpu: deferred init for NvidiaGpuDevice

Adds deferred init for NvidiaGpuDevice, so that when we bind
to this, the this pointer is valid, i.e. after construction
is completed

Change-Id: I24a53d2ab9be1a2a4431368414a154b48347d2a2
Signed-off-by: Marc Olberding <molberding@nvidia.com>
diff --git a/src/nvidia-gpu/Inventory.cpp b/src/nvidia-gpu/Inventory.cpp
index 0541d81..6796a32 100644
--- a/src/nvidia-gpu/Inventory.cpp
+++ b/src/nvidia-gpu/Inventory.cpp
@@ -72,7 +72,10 @@
         acceleratorInterface->register_property("Type", std::string("GPU"));
         acceleratorInterface->initialize();
     }
+}
 
+void Inventory::init()
+{
     processNextProperty();
 }
 
diff --git a/src/nvidia-gpu/Inventory.hpp b/src/nvidia-gpu/Inventory.hpp
index 5a24e56..b5f63a8 100644
--- a/src/nvidia-gpu/Inventory.hpp
+++ b/src/nvidia-gpu/Inventory.hpp
@@ -26,6 +26,8 @@
               gpu::DeviceIdentification deviceType, uint8_t eid,
               boost::asio::io_context& io);
 
+    void init();
+
   private:
     struct PropertyInfo
     {
diff --git a/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp b/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp
index 47ec061..9afb000 100644
--- a/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp
+++ b/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp
@@ -86,9 +86,13 @@
             auto gpuName = configs.name + '_' +
                            std::to_string(responseInstanceId);
 
-            gpuDevices[gpuName] =
-                std::make_shared<GpuDevice>(configs, gpuName, path, conn, eid,
-                                            io, mctpRequester, objectServer);
+            auto gpu = gpuDevices
+                           .insert(std::make_pair(
+                               gpuName, std::make_shared<GpuDevice>(
+                                            configs, gpuName, path, conn, eid,
+                                            io, mctpRequester, objectServer)))
+                           .first;
+            (*gpu).second->init();
             break;
         }
 
diff --git a/src/nvidia-gpu/NvidiaGpuDevice.cpp b/src/nvidia-gpu/NvidiaGpuDevice.cpp
index 4bba49c..78984c5 100644
--- a/src/nvidia-gpu/NvidiaGpuDevice.cpp
+++ b/src/nvidia-gpu/NvidiaGpuDevice.cpp
@@ -46,7 +46,12 @@
     inventory = std::make_shared<Inventory>(
         conn, objectServer, name, mctpRequester,
         gpu::DeviceIdentification::DEVICE_GPU, eid, io);
+}
+
+void GpuDevice::init()
+{
     makeSensors();
+    inventory->init();
 }
 
 void GpuDevice::makeSensors()
diff --git a/src/nvidia-gpu/NvidiaGpuDevice.hpp b/src/nvidia-gpu/NvidiaGpuDevice.hpp
index 2f5ee76..ac83994 100644
--- a/src/nvidia-gpu/NvidiaGpuDevice.hpp
+++ b/src/nvidia-gpu/NvidiaGpuDevice.hpp
@@ -41,6 +41,8 @@
         return path;
     }
 
+    void init();
+
   private:
     void makeSensors();