mdrv2: Attempt to update D-Bus objects in place

When systemInfoUpdate() is called multiple times, there's a potential
race condition of a user polling for the objects while the array of
D-Bus objects are erased and being repopulated. This results in
incomplete set of memory or CPU counts, which can lead to unforseen
consequences.

Tested: Verified that a corner case that was hitting this case
consistently (when SMBIOS was transferred using ipmi-blob repeatedly)
goes away with this implementation.

Signed-off-by: Brandon Kim <brandonkim@google.com>
Change-Id: I312aa91cd11b1dd06502d04272889922108d39a2
diff --git a/include/pcieslot.hpp b/include/pcieslot.hpp
index f984650..ccedcb9 100644
--- a/include/pcieslot.hpp
+++ b/include/pcieslot.hpp
@@ -47,13 +47,13 @@
          const std::string& motherboard) :
         sdbusplus::server::object_t<PCIeSlot, location, embedded, item,
                                     association>(bus, objPath.c_str()),
-        pcieNum(pcieId), storage(smbiosTableStorage),
-        motherboardPath(motherboard)
+        pcieNum(pcieId)
     {
-        pcieInfoUpdate();
+        pcieInfoUpdate(smbiosTableStorage, motherboard);
     }
 
-    void pcieInfoUpdate();
+    void pcieInfoUpdate(uint8_t* smbiosTableStorage,
+                        const std::string& motherboard);
 
   private:
     uint8_t pcieNum;