Fix a bug with new interface signals

When creating new objects, Defer sending of interface added
signals until all interfaces have been created.

Change-Id: I031846861bb8f569be054e1d0303810fc0dd6ba6
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/manager.cpp b/manager.cpp
index 4f56e7a..264037f 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -148,8 +148,11 @@
         // a container.
         InterfaceComposite ref;
 
+        auto i = object.size();
         for (auto& x : object)
         {
+            // Defer sending any signals until the last interface.
+            auto deferSignals = --i != 0;
             auto maker = _makers.find(x.first.c_str());
 
             if (maker == _makers.end())
@@ -157,7 +160,7 @@
                     "Unimplemented interface: " + x.first);
 
             ref.emplace(x.first,
-                        (maker->second)(_bus, path.str.c_str()));
+                        (maker->second)(_bus, path.str.c_str(), deferSignals));
         }
 
         if (!ref.empty())
diff --git a/manager.hpp b/manager.hpp
index 0c89017..2ffa47b 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -35,7 +35,7 @@
 template <typename T>
 struct MakeInterface
 {
-    static auto make(sdbusplus::bus::bus& bus, const char* path)
+    static auto make(sdbusplus::bus::bus& bus, const char* path, bool deferSignals)
     {
         using HolderType = holder::Holder<std::unique_ptr<T>>;
         return static_cast<std::unique_ptr<holder::Base>>(
@@ -43,7 +43,8 @@
                        std::forward<std::unique_ptr<T>>(
                            std::make_unique<T>(
                                std::forward<decltype(bus)>(bus),
-                               std::forward<decltype(path)>(path)))));
+                               std::forward<decltype(path)>(path),
+                               std::forward<decltype(deferSignals)>(deferSignals)))));
     }
 };
 } // namespace details
@@ -140,7 +141,7 @@
         using ObjectReferences = std::map<std::string, InterfaceComposite>;
         using Events = std::vector<EventInfo>;
         using MakerType = HolderPtr(*)(
-                              sdbusplus::bus::bus&, const char*);
+                              sdbusplus::bus::bus&, const char*, bool);
         using Makers = std::map<std::string, MakerType>;
 
         /** @brief Provides weak references to interface holders.