Usually when references are used ownership is not moved. Avoid to use references to confuse code reader. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- include/spice-streaming-agent/plugin.hpp | 4 +++- src/concrete-agent.cpp | 4 ++-- src/concrete-agent.hpp | 2 +- src/gst-plugin.cpp | 4 ++-- src/mjpeg-fallback.cpp | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) Changes since v1: - use std::shared_ptr diff --git a/include/spice-streaming-agent/plugin.hpp b/include/spice-streaming-agent/plugin.hpp index e9acf2d..3b265d9 100644 --- a/include/spice-streaming-agent/plugin.hpp +++ b/include/spice-streaming-agent/plugin.hpp @@ -8,6 +8,7 @@ #define SPICE_STREAMING_AGENT_PLUGIN_HPP #include <spice/enums.h> +#include <memory> /*! * \file @@ -104,8 +105,9 @@ class Agent public: /*! * Register a plugin in the system. + * Agent will take ownership of the plugin. */ - virtual void Register(Plugin& plugin) = 0; + virtual void Register(const std::shared_ptr<Plugin>& plugin) = 0; /*! * Get options array. diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp index 1f8b4b4..f94aead 100644 --- a/src/concrete-agent.cpp +++ b/src/concrete-agent.cpp @@ -37,9 +37,9 @@ bool ConcreteAgent::PluginVersionIsCompatible(unsigned pluginVersion) const MinorVersion(version) >= MinorVersion(pluginVersion); } -void ConcreteAgent::Register(Plugin& plugin) +void ConcreteAgent::Register(const std::shared_ptr<Plugin>& plugin) { - plugins.push_back(std::shared_ptr<Plugin>(&plugin)); + plugins.push_back(plugin); } const ConfigureOption* ConcreteAgent::Options() const diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp index c0cf9ba..99dcf54 100644 --- a/src/concrete-agent.hpp +++ b/src/concrete-agent.hpp @@ -27,7 +27,7 @@ class ConcreteAgent final : public Agent { public: ConcreteAgent(); - void Register(Plugin& plugin) override; + void Register(const std::shared_ptr<Plugin>& plugin) override; const ConfigureOption* Options() const override; void LoadPlugins(const std::string &directory); // pointer must remain valid diff --git a/src/gst-plugin.cpp b/src/gst-plugin.cpp index 6eb9e7e..097ef9d 100644 --- a/src/gst-plugin.cpp +++ b/src/gst-plugin.cpp @@ -452,11 +452,11 @@ SPICE_STREAMING_AGENT_PLUGIN(agent) { gst_init(nullptr, nullptr); - std::unique_ptr<GstreamerPlugin> plugin(new GstreamerPlugin()); + auto plugin = std::make_shared<GstreamerPlugin>(); plugin->ParseOptions(agent->Options()); - agent->Register(*plugin.release()); + agent->Register(plugin); return true; } diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp index 08353f2..8081007 100644 --- a/src/mjpeg-fallback.cpp +++ b/src/mjpeg-fallback.cpp @@ -180,7 +180,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType() const { bool MjpegPlugin::Register(Agent* agent) { - std::unique_ptr<MjpegPlugin> plugin(new MjpegPlugin()); + auto plugin = std::make_shared<MjpegPlugin>(); try { plugin->ParseOptions(agent->Options()); @@ -188,7 +188,7 @@ bool MjpegPlugin::Register(Agent* agent) syslog(LOG_ERR, "Error parsing plugin option: %s", e.what()); } - agent->Register(*plugin.release()); + agent->Register(plugin); return true; } -- 2.17.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel