object: allow deferred creation signal
Change-Id: I4da3e502c667fbcd3c46749f8e0d61744beee055
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/sdbusplus/server/object.hpp b/sdbusplus/server/object.hpp
index 421dc53..7da6f35 100644
--- a/sdbusplus/server/object.hpp
+++ b/sdbusplus/server/object.hpp
@@ -80,15 +80,23 @@
*
* @param[in] bus - The bus to place the object on.
* @param[in] path - The path the object resides at.
+ * @param[in] deferSignal - Set to true if emit_object_added should be
+ * deferred. This would likely be true if the
+ * object needs custom property init before the
+ * signal can be sent.
*/
object(bus::bus& bus,
- const char* path)
+ const char* path,
+ bool deferSignal = false)
: details::compose<Args...>(bus, path),
__sdbusplus_server_object_bus(sd_bus_ref(bus.get())),
- __sdbusplus_server_object_path(path)
+ __sdbusplus_server_object_path(path),
+ __sdbusplus_server_object_emitremoved(false)
{
- sd_bus_emit_object_added(__sdbusplus_server_object_bus.get(),
- __sdbusplus_server_object_path.c_str());
+ if (!deferSignal)
+ {
+ emit_object_added();
+ }
}
~object()
@@ -97,6 +105,17 @@
__sdbusplus_server_object_path.c_str());
}
+ /** Emit the 'object-added' signal, if not already sent. */
+ void emit_object_added()
+ {
+ if (!__sdbusplus_server_object_emitremoved)
+ {
+ sd_bus_emit_object_added(__sdbusplus_server_object_bus.get(),
+ __sdbusplus_server_object_path.c_str());
+ __sdbusplus_server_object_emitremoved = true;
+ }
+ }
+
private:
// These member names are purposefully chosen as long and, hopefully,
// unique. Since an object is 'composed' via multiple-inheritence,
@@ -104,6 +123,7 @@
// ambiguity.
bus::bus __sdbusplus_server_object_bus;
std::string __sdbusplus_server_object_path;
+ bool __sdbusplus_server_object_emitremoved;
};