diff --git a/mesh/manager.c b/mesh/manager.c
index 0b11b45..adbb012 100644
--- a/mesh/manager.c
+++ b/mesh/manager.c
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
*/
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
#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
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);
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);
}