2022-07-25 08:10:05

by Michał Lowas-Rzechonek

[permalink] [raw]
Subject: [PATCH BlueZ v2] mesh: Set global bus earlier

Some io implementations might want to either make calls to other D-Bus
services, or provide additional objects/interfaces that allow
applications to fine-tune their operation, so allow them to use the bus
even before initializing mesh D-Bus interfaces.
---
mesh/dbus.c | 8 ++++++++
mesh/dbus.h | 1 +
mesh/main.c | 2 ++
3 files changed, 11 insertions(+)

diff --git a/mesh/dbus.c b/mesh/dbus.c
index a7abdc428..6e62abd27 100644
--- a/mesh/dbus.c
+++ b/mesh/dbus.c
@@ -75,6 +75,11 @@ struct l_dbus_message *dbus_error(struct l_dbus_message *msg, int err,
"%s", error_table[err].default_desc);
}

+void dbus_set_bus(struct l_dbus *bus)
+{
+ dbus = bus;
+}
+
struct l_dbus *dbus_get_bus(void)
{
return dbus;
@@ -82,6 +87,9 @@ struct l_dbus *dbus_get_bus(void)

bool dbus_init(struct l_dbus *bus)
{
+ if (dbus != bus)
+ return false;
+
/* Network interface */
if (!mesh_dbus_init(bus))
return false;
diff --git a/mesh/dbus.h b/mesh/dbus.h
index 8f00434d6..ab8b0a2cc 100644
--- a/mesh/dbus.h
+++ b/mesh/dbus.h
@@ -14,6 +14,7 @@
#define DEFAULT_DBUS_TIMEOUT 30

bool dbus_init(struct l_dbus *dbus);
+void dbus_set_bus(struct l_dbus *bus);
struct l_dbus *dbus_get_bus(void);
void dbus_append_byte_array(struct l_dbus_message_builder *builder,
const uint8_t *data, int len);
diff --git a/mesh/main.c b/mesh/main.c
index dd99c3085..0180c3768 100644
--- a/mesh/main.c
+++ b/mesh/main.c
@@ -278,6 +278,8 @@ int main(int argc, char *argv[])
goto done;
}

+ dbus_set_bus(dbus);
+
if (dbus_debug)
l_dbus_set_debug(dbus, do_debug, "[DBUS] ", NULL);
l_dbus_set_ready_handler(dbus, ready_callback, dbus, NULL);
--
2.25.1


2022-07-25 09:18:28

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,v2] mesh: Set global bus earlier

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=662693

---Test result---

Test Summary:
CheckPatch PASS 1.01 seconds
GitLint PASS 0.54 seconds
Prep - Setup ELL PASS 32.04 seconds
Build - Prep PASS 0.68 seconds
Build - Configure PASS 9.73 seconds
Build - Make PASS 736.69 seconds
Make Check PASS 11.17 seconds
Make Check w/Valgrind PASS 294.36 seconds
Make Distcheck PASS 246.27 seconds
Build w/ext ELL - Configure PASS 9.89 seconds
Build w/ext ELL - Make PASS 90.77 seconds
Incremental Build w/ patches PASS 0.00 seconds
Scan Build PASS 495.61 seconds



---
Regards,
Linux Bluetooth

2022-07-29 06:11:14

by Stotland, Inga

[permalink] [raw]
Subject: Re: [PATCH BlueZ v2] mesh: Set global bus earlier

Hi Michał,

On Mon, 2022-07-25 at 10:05 +0200, Michał Lowas-Rzechonek wrote:
> Some io implementations might want to either make calls to other D-
> Bus
> services, or provide additional objects/interfaces that allow
> applications to fine-tune their operation, so allow them to use the
> bus
> even before initializing mesh D-Bus interfaces.
> ---
>  mesh/dbus.c | 8 ++++++++
>  mesh/dbus.h | 1 +
>  mesh/main.c | 2 ++
>  3 files changed, 11 insertions(+)
>
> diff --git a/mesh/dbus.c b/mesh/dbus.c
> index a7abdc428..6e62abd27 100644
> --- a/mesh/dbus.c
> +++ b/mesh/dbus.c
> @@ -75,6 +75,11 @@ struct l_dbus_message *dbus_error(struct
> l_dbus_message *msg, int err,
>                                 "%s", error_table[err].default_desc);
>  }
>  
> +void dbus_set_bus(struct l_dbus *bus)
> +{
> +       dbus = bus;
> +}
> +
>  struct l_dbus *dbus_get_bus(void)
>  {
>         return dbus;
> @@ -82,6 +87,9 @@ struct l_dbus *dbus_get_bus(void)
>  
>  bool dbus_init(struct l_dbus *bus)
>  {
> +       if (dbus != bus)
> +               return false;
> +


Since dbus_set_bus() is called prior to dbus_init(), wouldn't it make
sense to eliminate an input parameter for dbus_init() and to perform a
check (dbus != NULL) and also eliminate 
"dbus = bus" statement at the end of dbus_init()?


>         /* Network interface */
>         if (!mesh_dbus_init(bus))
>                 return false;
> diff --git a/mesh/dbus.h b/mesh/dbus.h
> index 8f00434d6..ab8b0a2cc 100644
> --- a/mesh/dbus.h
> +++ b/mesh/dbus.h
> @@ -14,6 +14,7 @@
>  #define DEFAULT_DBUS_TIMEOUT   30
>  
>  bool dbus_init(struct l_dbus *dbus);
> +void dbus_set_bus(struct l_dbus *bus);
>  struct l_dbus *dbus_get_bus(void);
>  void dbus_append_byte_array(struct l_dbus_message_builder *builder,
>                                                 const uint8_t *data,
> int len);
> diff --git a/mesh/main.c b/mesh/main.c
> index dd99c3085..0180c3768 100644
> --- a/mesh/main.c
> +++ b/mesh/main.c
> @@ -278,6 +278,8 @@ int main(int argc, char *argv[])
>                 goto done;
>         }
>  
> +       dbus_set_bus(dbus);
> +

It is better to call dbus_set_bus from within ready_callback()

>         if (dbus_debug)
>                 l_dbus_set_debug(dbus, do_debug, "[DBUS] ", NULL);
>         l_dbus_set_ready_handler(dbus, ready_callback, dbus, NULL);

Best regards,

Inga