Re: [PATCH 1/4] kernel-shark: Define addPlugin method for KsPluginManager

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 8, 2019 at 7:14 PM Yordan Karadzhov <ykaradzhov@xxxxxxxxxx> wrote:
>
> The method can be used to register and load a user-defined plugin.
> All other previously loaded plugins will be reloaded.
>
> Signed-off-by: Yordan Karadzhov <ykaradzhov@xxxxxxxxxx>
> ---
>  kernel-shark/src/KsUtils.cpp | 17 +++++++++++++++++
>  kernel-shark/src/KsUtils.hpp |  3 +++
>  2 files changed, 20 insertions(+)
>
> diff --git a/kernel-shark/src/KsUtils.cpp b/kernel-shark/src/KsUtils.cpp
> index d7b1753..4d05bda 100644
> --- a/kernel-shark/src/KsUtils.cpp
> +++ b/kernel-shark/src/KsUtils.cpp
> @@ -596,6 +596,23 @@ void KsPluginManager::unregisterPlugin(const QString &plugin)
>         }
>  }
>
> +/** @brief Add to the list and load a user-provided plugin. All other
> + *        previously loaded plugins will be reloaded.
> + *
> + * @param fileName: the library file (.so) of the plugin.
> +*/
> +void KsPluginManager::addPlugin(const QString &fileName)
> +{
> +       kshark_context *kshark_ctx(nullptr);
> +
> +       if (!kshark_instance(&kshark_ctx))
> +               return;
> +
> +       kshark_handle_plugins(kshark_ctx, KSHARK_PLUGIN_CLOSE);
> +       registerPlugin(fileName);
> +       kshark_handle_plugins(kshark_ctx, KSHARK_PLUGIN_INIT);
> +}

Calling addPlugin() several times in a row will reinitialize all
already registered plugins several times and lead to quadratic
complexity. This seems wrong to me.

Maybe we should split adding plugins from (re-)initializing them so
that one can add several plugins and then have initialized once when
they are actually needed to run. Wdyt?

--Slavi

> +
>  /** Unload all plugins. */
>  void KsPluginManager::unloadAll()
>  {
> diff --git a/kernel-shark/src/KsUtils.hpp b/kernel-shark/src/KsUtils.hpp
> index cb95b4f..ae7f6d1 100644
> --- a/kernel-shark/src/KsUtils.hpp
> +++ b/kernel-shark/src/KsUtils.hpp
> @@ -210,6 +210,9 @@ public:
>
>         void registerPlugin(const QString &plugin);
>         void unregisterPlugin(const QString &plugin);
> +
> +       void addPlugin(const QString &fileName);
> +
>         void unloadAll();
>
>         void updatePlugins(QVector<int> pluginId);
> --
> 2.19.1
>


-- 
Slavomir Kaslev



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux