Diff between 6dcea66fc2fed74d945c415a5aa1747ff247f4da and d64f6c885580ef23eb28e53edf1a007bb3628804

Changed Files

File Additions Deletions Status
mesh/manager.c +8 -0 modified
mesh/manager.h +1 -0 modified
mesh/node.c +10 -0 modified

Full Patch

diff --git a/mesh/manager.c b/mesh/manager.c
index 0b11b45..adbb012 100644
--- a/mesh/manager.c
+++ b/mesh/manager.c
@@ -794,3 +794,11 @@ bool manager_dbus_init(struct l_dbus *bus)
 
 	return true;
 }
+
+void manager_scan_cancel(struct mesh_node *node)
+{
+	if (scan_node != node)
+		return;
+
+	scan_cancel(NULL, node);
+}
diff --git a/mesh/manager.h b/mesh/manager.h
index f27ca41..5a4c7d9 100644
--- a/mesh/manager.h
+++ b/mesh/manager.h
@@ -18,3 +18,4 @@
  */
 
 bool manager_dbus_init(struct l_dbus *dbus);
+void manager_scan_cancel(struct mesh_node *node);
diff --git a/mesh/node.c b/mesh/node.c
index e1f0bcf..d433c2d 100644
--- a/mesh/node.c
+++ b/mesh/node.c
@@ -42,6 +42,7 @@
 #include "mesh/error.h"
 #include "mesh/dbus.h"
 #include "mesh/agent.h"
+#include "mesh/manager.h"
 #include "mesh/node.h"
 
 #define MIN_COMP_SIZE 14
@@ -314,6 +315,10 @@ static void free_node_resources(void *data)
 	l_queue_destroy(node->elements, element_free);
 	node->elements = NULL;
 
+	/* In case of a provisioner, stop active scanning */
+	if (node->provisioner)
+		manager_scan_cancel(node);
+
 	free_node_dbus_resources(node);
 
 	mesh_net_free(node->net);
@@ -1174,6 +1179,11 @@ static void app_disc_cb(struct l_dbus *bus, void *user_data)
 	l_info("App %s disconnected (%u)", node->owner, node->disc_watch);
 
 	node->disc_watch = 0;
+
+	/* In case of a provisioner, stop active scanning */
+	if (node->provisioner)
+		manager_scan_cancel(node);
+
 	free_node_dbus_resources(node);
 }