Re: [PATCH BlueZ v4 7/8] bluetoothd: change plugin loading alike obexd

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

 



Hi Paul,

On Mon, Jan 29, 2024 at 10:37 AM Paul Menzel <pmenzel@xxxxxxxxxxxxx> wrote:
>
> Dear Emil,
>
>
> Thank you for your patches.
>
> Am 29.01.24 um 15:44 schrieb Emil Velikov via B4 Relay:
> > From: Emil Velikov <emil.velikov@xxxxxxxxxxxxx>
> >
> > Currently, we print "Loading foobar" for every plugin, before we try the
> > respective init() callback. Instead we handle the latter in a bunch, at
> > the end of the process.
>
> Excuse my ignorance, but would you be so kind to state the problem. It’s
> causing confusion to have `Loading foobar`, in case it fails? It
> clutters the output or uses unnecessory resources?

To me it sounds quite clear that he is refering to the fact that obexd
prints it a little differently so he is just trying to align the
behavior of the daemons.

> > Do the init() call early, print "Loaded" once it's actually successful
> > and drop the no-longer "active" tracking.
>
> It would help me, if you pasted the logs without and with your patch.
>
>
> Kind regards,
>
> Paul
>
>
> > ---
> >   src/plugin.c | 53 +++++++++++++++++++++++++++++------------------------
> >   1 file changed, 29 insertions(+), 24 deletions(-)
> >
> > diff --git a/src/plugin.c b/src/plugin.c
> > index b6a84299a..e6d05be4c 100644
> > --- a/src/plugin.c
> > +++ b/src/plugin.c
> > @@ -32,7 +32,6 @@ static GSList *plugins = NULL;
> >
> >   struct bluetooth_plugin {
> >       void *handle;
> > -     gboolean active;
> >       const struct bluetooth_plugin_desc *desc;
> >   };
> >
> > @@ -44,6 +43,22 @@ static int compare_priority(gconstpointer a, gconstpointer b)
> >       return plugin2->desc->priority - plugin1->desc->priority;
> >   }
> >
> > +static int init_plugin(const struct bluetooth_plugin_desc *desc)
> > +{
> > +     int err;
> > +
> > +     err = desc->init();
> > +     if (err < 0) {
> > +             if (err == -ENOSYS || err == -ENOTSUP)
> > +                     warn("System does not support %s plugin",
> > +                                             desc->name);
> > +             else
> > +                     error("Failed to init %s plugin",
> > +                                             desc->name);
> > +     }
> > +     return err;
> > +}
> > +
> >   static gboolean add_external_plugin(void *handle,
> >                               const struct bluetooth_plugin_desc *desc)
> >   {
> > @@ -57,19 +72,22 @@ static gboolean add_external_plugin(void *handle,
> >               return FALSE;
> >       }
> >
> > -     DBG("Loading %s plugin", desc->name);
> > -
> >       plugin = g_try_new0(struct bluetooth_plugin, 1);
> >       if (plugin == NULL)
> >               return FALSE;
> >
> >       plugin->handle = handle;
> > -     plugin->active = FALSE;
> >       plugin->desc = desc;
> >
> > +     if (init_plugin(desc) < 0) {
> > +             g_free(plugin);
> > +             return FALSE;
> > +     }
> > +
> >       __btd_enable_debug(desc->debug_start, desc->debug_stop);
> >
> >       plugins = g_slist_insert_sorted(plugins, plugin, compare_priority);
> > +     DBG("Plugin %s loaded", desc->name);
> >
> >       return TRUE;
> >   }
> > @@ -86,7 +104,13 @@ static void add_plugin(const struct bluetooth_plugin_desc *desc)
> >
> >       plugin->desc = desc;
> >
> > +     if (init_plugin(desc) < 0) {
> > +             g_free(plugin);
> > +             return;
> > +     }
> > +
> >       plugins = g_slist_insert_sorted(plugins, plugin, compare_priority);
> > +     DBG("Plugin %s loaded", desc->name);
> >   }
> >
> >   static gboolean enable_plugin(const char *name, char **cli_enable,
> > @@ -177,7 +201,6 @@ static void external_plugin_init(char **cli_disabled, char **cli_enabled)
> >
> >   void plugin_init(const char *enable, const char *disable)
> >   {
> > -     GSList *list;
> >       char **cli_disabled = NULL;
> >       char **cli_enabled = NULL;
> >       unsigned int i;
> > @@ -205,24 +228,6 @@ void plugin_init(const char *enable, const char *disable)
> >       if IS_ENABLED(EXTERNAL_PLUGINS)
> >               external_plugin_init(cli_enabled, cli_disabled);
> >
> > -     for (list = plugins; list; list = list->next) {
> > -             struct bluetooth_plugin *plugin = list->data;
> > -             int err;
> > -
> > -             err = plugin->desc->init();
> > -             if (err < 0) {
> > -                     if (err == -ENOSYS || err == -ENOTSUP)
> > -                             warn("System does not support %s plugin",
> > -                                                     plugin->desc->name);
> > -                     else
> > -                             error("Failed to init %s plugin",
> > -                                                     plugin->desc->name);
> > -                     continue;
> > -             }
> > -
> > -             plugin->active = TRUE;
> > -     }
> > -
> >       g_strfreev(cli_enabled);
> >       g_strfreev(cli_disabled);
> >   }
> > @@ -236,7 +241,7 @@ void plugin_cleanup(void)
> >       for (list = plugins; list; list = list->next) {
> >               struct bluetooth_plugin *plugin = list->data;
> >
> > -             if (plugin->active == TRUE && plugin->desc->exit)
> > +             if (plugin->desc->exit)
> >                       plugin->desc->exit();
> >
> >               if (plugin->handle != NULL)
> >
>


-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux