[Spice-devel] [PATCH spice-streaming-agent v2] plugin: Do not use references to pass ownership

Frediano Ziglio fziglio at redhat.com
Thu Sep 27 13:10:11 UTC 2018


Usually when references are used ownership is not moved.
Avoid to use references to confuse code reader.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 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



More information about the Spice-devel mailing list