From e492894a5e779f568235ddf912f9c8da62794320 Mon Sep 17 00:00:00 2001 From: Pavel Vasilyev Date: Tue, 12 Jul 2022 09:36:51 +0200 Subject: [PATCH] Bluetooth: Mesh: Call bt_mesh_reset in cfg srv from workqueue Struct bt_mesh_send_cb.end is called from the mesh advertiser thread. bt_mesh_reset now requires more stack size, thus can't be called from the advertiser thread. k_work instance requires less memory than needed for bt_mesh_reset. Signed-off-by: Pavel Vasilyev --- subsys/bluetooth/mesh/cfg_srv.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/subsys/bluetooth/mesh/cfg_srv.c b/subsys/bluetooth/mesh/cfg_srv.c index 896d6470534..547331248c5 100644 --- a/subsys/bluetooth/mesh/cfg_srv.c +++ b/subsys/bluetooth/mesh/cfg_srv.c @@ -38,6 +38,13 @@ #include "settings.h" #include "cfg.h" +static void node_reset_pending_handler(struct k_work *work) +{ + bt_mesh_reset(); +} + +static K_WORK_DEFINE(node_reset_pending, node_reset_pending_handler); + static int comp_add_elem(struct net_buf_simple *buf, struct bt_mesh_elem *elem, bool primary) { @@ -2071,13 +2078,13 @@ static void reset_send_start(uint16_t duration, int err, void *cb_data) { if (err) { BT_ERR("Sending Node Reset Status failed (err %d)", err); - bt_mesh_reset(); + k_work_submit(&node_reset_pending); } } static void reset_send_end(int err, void *cb_data) { - bt_mesh_reset(); + k_work_submit(&node_reset_pending); } static int node_reset(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx,