Do not call acceptor_cancel() if the provisioning has been completed,
either fail or success. Acceptor automatically takes care of cleanup
on completion, either successful or not.
---
mesh/mesh.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/mesh/mesh.c b/mesh/mesh.c
index a1c26e77c..881b6ed73 100644
--- a/mesh/mesh.c
+++ b/mesh/mesh.c
@@ -354,8 +354,6 @@ static void free_pending_join_call(bool failed)
l_dbus_remove_watch(dbus_get_bus(),
join_pending->disc_watch);
- acceptor_cancel(&mesh);
-
mesh_agent_remove(join_pending->agent);
if (failed) {
@@ -375,11 +373,14 @@ void mesh_cleanup(void)
mgmt_unref(mgmt_mesh);
if (join_pending) {
- /* The Join() call failed since it has not been completed */
- reply = dbus_error(join_pending->msg, MESH_ERROR_FAILED,
+
+ if (join_pending->msg) {
+ reply = dbus_error(join_pending->msg, MESH_ERROR_FAILED,
"Failed. Exiting");
- l_dbus_send(dbus_get_bus(), reply);
+ l_dbus_send(dbus_get_bus(), reply);
+ }
+ acceptor_cancel(&mesh);
free_pending_join_call(true);
}
@@ -428,6 +429,7 @@ static void prov_disc_cb(struct l_dbus *bus, void *user_data)
if (join_pending->msg)
l_dbus_message_unref(join_pending->msg);
+ acceptor_cancel(&mesh);
join_pending->disc_watch = 0;
free_pending_join_call(true);
--
2.17.2
patch applied
> -----Original Message-----
> From: Stotland, Inga
> Sent: Friday, January 18, 2019 10:53 PM
> To: [email protected]
> Cc: Gix, Brian <[email protected]>; Stotland, Inga
> <[email protected]>
> Subject: [PATCH BlueZ] mesh: Fix logic when cleaning up incomplete
> provisioning
>
> Do not call acceptor_cancel() if the provisioning has been completed, either
> fail or success. Acceptor automatically takes care of cleanup on completion,
> either successful or not.
> ---
> mesh/mesh.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/mesh/mesh.c b/mesh/mesh.c
> index a1c26e77c..881b6ed73 100644
> --- a/mesh/mesh.c
> +++ b/mesh/mesh.c
> @@ -354,8 +354,6 @@ static void free_pending_join_call(bool failed)
> l_dbus_remove_watch(dbus_get_bus(),
> join_pending->disc_watch);
>
> - acceptor_cancel(&mesh);
> -
> mesh_agent_remove(join_pending->agent);
>
> if (failed) {
> @@ -375,11 +373,14 @@ void mesh_cleanup(void)
> mgmt_unref(mgmt_mesh);
>
> if (join_pending) {
> - /* The Join() call failed since it has not been completed */
> - reply = dbus_error(join_pending->msg,
> MESH_ERROR_FAILED,
> +
> + if (join_pending->msg) {
> + reply = dbus_error(join_pending->msg,
> MESH_ERROR_FAILED,
> "Failed. Exiting");
> - l_dbus_send(dbus_get_bus(), reply);
> + l_dbus_send(dbus_get_bus(), reply);
> + }
>
> + acceptor_cancel(&mesh);
> free_pending_join_call(true);
> }
>
> @@ -428,6 +429,7 @@ static void prov_disc_cb(struct l_dbus *bus, void
> *user_data)
> if (join_pending->msg)
> l_dbus_message_unref(join_pending->msg);
>
> + acceptor_cancel(&mesh);
> join_pending->disc_watch = 0;
>
> free_pending_join_call(true);
> --
> 2.17.2