2020-01-07 23:05:44

by Michał Lowas-Rzechonek

[permalink] [raw]
Subject: [PATCH BlueZ] mesh: Fix node reset

Instead of stopping the daemon, just remove the node.

---
mesh/cfgmod-server.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/mesh/cfgmod-server.c b/mesh/cfgmod-server.c
index 8acde95b9..bb43f01a0 100644
--- a/mesh/cfgmod-server.c
+++ b/mesh/cfgmod-server.c
@@ -740,9 +740,11 @@ static int hb_subscription_set(struct mesh_net *net, uint16_t src,

static void node_reset(struct l_timeout *timeout, void *user_data)
{
+ struct mesh_node *node = user_data;
+
l_debug("Node Reset");
l_timeout_remove(timeout);
- l_main_quit();
+ node_remove(node);
}

static bool cfg_srv_pkt(uint16_t src, uint32_t dst, uint16_t unicast,
@@ -1265,7 +1267,11 @@ static bool cfg_srv_pkt(uint16_t src, uint32_t dst, uint16_t unicast,

case OP_NODE_RESET:
n = mesh_model_opcode_set(OP_NODE_RESET_STATUS, msg);
- l_timeout_create(1, node_reset, net, NULL);
+ /*
+ * delay node removal to give it a chance to send back the
+ * status
+ */
+ l_timeout_create(1, node_reset, node, NULL);
break;
}

--
2.23.0


2020-01-08 17:14:00

by Gix, Brian

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Fix node reset

Applied
On Wed, 2020-01-08 at 00:05 +0100, Michał Lowas-Rzechonek wrote:
> Instead of stopping the daemon, just remove the node.
>
> ---
> mesh/cfgmod-server.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/mesh/cfgmod-server.c b/mesh/cfgmod-server.c
> index 8acde95b9..bb43f01a0 100644
> --- a/mesh/cfgmod-server.c
> +++ b/mesh/cfgmod-server.c
> @@ -740,9 +740,11 @@ static int hb_subscription_set(struct mesh_net *net, uint16_t src,
>
> static void node_reset(struct l_timeout *timeout, void *user_data)
> {
> + struct mesh_node *node = user_data;
> +
> l_debug("Node Reset");
> l_timeout_remove(timeout);
> - l_main_quit();
> + node_remove(node);
> }
>
> static bool cfg_srv_pkt(uint16_t src, uint32_t dst, uint16_t unicast,
> @@ -1265,7 +1267,11 @@ static bool cfg_srv_pkt(uint16_t src, uint32_t dst, uint16_t unicast,
>
> case OP_NODE_RESET:
> n = mesh_model_opcode_set(OP_NODE_RESET_STATUS, msg);
> - l_timeout_create(1, node_reset, net, NULL);
> + /*
> + * delay node removal to give it a chance to send back the
> + * status
> + */
> + l_timeout_create(1, node_reset, node, NULL);
> break;
> }
>