The static registration (that is, having a static list of pointers to static plugin variables and calling a generic function in the main initialization code path to register them) allows to add plugins without registering each of them explicitly. However, in a single codebase, and having very few plugins, there is very little advantage to it and the tradeoff for the complexity of this initialization is not worth it. A single call for every built-in plugin is much more simple and clear. Signed-off-by: Lukáš Hrázký <lhrazky@xxxxxxxxxx> --- src/Makefile.am | 2 -- src/concrete-agent.cpp | 3 --- src/mjpeg-fallback.cpp | 6 +----- src/mjpeg-fallback.hpp | 1 + src/spice-streaming-agent.cpp | 4 ++++ src/static-plugin.cpp | 23 ----------------------- src/static-plugin.hpp | 35 ----------------------------------- 7 files changed, 6 insertions(+), 68 deletions(-) delete mode 100644 src/static-plugin.cpp delete mode 100644 src/static-plugin.hpp diff --git a/src/Makefile.am b/src/Makefile.am index 8d5c5bd..590db1f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \ spice_streaming_agent_SOURCES = \ spice-streaming-agent.cpp \ - static-plugin.cpp \ - static-plugin.hpp \ concrete-agent.cpp \ concrete-agent.hpp \ mjpeg-fallback.cpp \ diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp index 873a69e..c69da43 100644 --- a/src/concrete-agent.cpp +++ b/src/concrete-agent.cpp @@ -11,7 +11,6 @@ #include <dlfcn.h> #include "concrete-agent.hpp" -#include "static-plugin.hpp" using namespace std; using namespace SpiceStreamingAgent; @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, const char *value) void ConcreteAgent::LoadPlugins(const string &directory) { - StaticPlugin::InitAll(*this); - string pattern = directory + "/*.so"; glob_t globbuf; diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp index 7c918a7..d7c676d 100644 --- a/src/mjpeg-fallback.cpp +++ b/src/mjpeg-fallback.cpp @@ -15,7 +15,6 @@ #include <syslog.h> #include <X11/Xlib.h> -#include "static-plugin.hpp" #include "jpeg.hpp" using namespace std; @@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType() const { return SPICE_VIDEO_CODEC_TYPE_MJPEG; } -static bool -mjpeg_plugin_init(Agent* agent) +bool MjpegPlugin::Register(Agent* agent) { if (agent->Version() != PluginVersion) return false; @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent) return true; } - -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init); diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp index 8044244..0e9ed6a 100644 --- a/src/mjpeg-fallback.hpp +++ b/src/mjpeg-fallback.hpp @@ -25,6 +25,7 @@ public: unsigned Rank() override; void ParseOptions(const ConfigureOption *options); SpiceVideoCodecType VideoCodecType() const; + static bool Register(Agent* agent); private: MjpegSettings settings = { 10, 80 }; }; diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp index 94d9d25..8458975 100644 --- a/src/spice-streaming-agent.cpp +++ b/src/spice-streaming-agent.cpp @@ -34,6 +34,7 @@ #include "hexdump.h" #include "concrete-agent.hpp" +#include "mjpeg-fallback.hpp" using namespace std; using namespace SpiceStreamingAgent; @@ -489,6 +490,9 @@ int main(int argc, char* argv[]) } } + // register built-in plugins + MjpegPlugin::Register(&agent); + agent.LoadPlugins(PLUGINSDIR); register_interrupts(); diff --git a/src/static-plugin.cpp b/src/static-plugin.cpp deleted file mode 100644 index d5feb22..0000000 --- a/src/static-plugin.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* Utility to manage registration of plugins compiled statically - * - * \copyright - * Copyright 2017 Red Hat Inc. All rights reserved. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdlib.h> -#include "static-plugin.hpp" - -using namespace SpiceStreamingAgent; - -const StaticPlugin *StaticPlugin::list = nullptr; - -void StaticPlugin::InitAll(Agent& agent) -{ - for (const StaticPlugin* plugin = list; plugin; plugin = plugin->next) { - plugin->init_func(&agent); - } -} diff --git a/src/static-plugin.hpp b/src/static-plugin.hpp deleted file mode 100644 index 5436b41..0000000 --- a/src/static-plugin.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* Utility to manage registration of plugins compiled statically - * - * \copyright - * Copyright 2017 Red Hat Inc. All rights reserved. - */ -#ifndef SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP -#define SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP - -#include <spice-streaming-agent/plugin.hpp> - -namespace SpiceStreamingAgent { - -class StaticPlugin final { -public: - StaticPlugin(PluginInitFunc init_func): - next(list), - init_func(init_func) - { - list = this; - } - static void InitAll(Agent& agent); -private: - // this should be instantiated statically - void *operator new(size_t s); - void *operator new[](size_t s); - - const StaticPlugin *const next; - const PluginInitFunc* const init_func; - - static const StaticPlugin *list; -}; - -} - -#endif // SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP -- 2.16.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel