2019-05-22 05:34:50

by Stotland, Inga

[permalink] [raw]
Subject: [PATCH BlueZ 0/2] mesh: Clean up D-Bus message references

This set of patches cleans up the usage of l_dbus_message_ref() and
l_dbus_message_unref() in the mesh daemon

Inga Stotland (2):
mesh: Unreference pending D-Bus messages
mesh: Remove unnecessary message ref/unref in agent.c

mesh/agent.c | 16 ----------------
mesh/mesh.c | 8 +++++---
2 files changed, 5 insertions(+), 19 deletions(-)

--
2.21.0


2019-05-22 05:34:50

by Stotland, Inga

[permalink] [raw]
Subject: [PATCH BlueZ 2/2] mesh: Remove unnecessary message ref/unref in agent.c

This removes calls to reference/unrefernce D-Bus messages for
the methods that are called on org.bluez.mesh.ProvisionAgent1
interface since the referenced messages are not used.
---
mesh/agent.c | 16 ----------------
1 file changed, 16 deletions(-)

diff --git a/mesh/agent.c b/mesh/agent.c
index 4f99bad7b..1cd09eee8 100644
--- a/mesh/agent.c
+++ b/mesh/agent.c
@@ -199,7 +199,6 @@ static void agent_free(void *agent_data)
break;
}

- l_dbus_message_unref(req->msg);
l_free(req);
}

@@ -310,8 +309,6 @@ static void simple_reply(struct l_dbus_message *reply, void *user_data)

err = get_reply_error(reply);

- l_dbus_message_unref(req->msg);
-
if (req->cb) {
cb = req->cb;
cb(req->user_data, err);
@@ -345,8 +342,6 @@ static void numeric_reply(struct l_dbus_message *reply, void *user_data)
}
}

- l_dbus_message_unref(req->msg);
-
if (req->cb) {
cb = req->cb;
cb(req->user_data, err, count);
@@ -402,8 +397,6 @@ static void key_reply(struct l_dbus_message *reply, void *user_data)
}

done:
- l_dbus_message_unref(req->msg);
-
if (req->cb) {
cb = req->cb;
cb(req->user_data, err, buf, n);
@@ -444,8 +437,6 @@ static int output_request(struct mesh_agent *agent, const char *action,
l_dbus_send_with_reply(dbus_get_bus(), msg, simple_reply, agent,
NULL);

- agent->req->msg = l_dbus_message_ref(msg);
-
return MESH_ERROR_NONE;
}

@@ -486,8 +477,6 @@ static int prompt_input(struct mesh_agent *agent, const char *action,

l_dbus_send_with_reply(dbus_get_bus(), msg, reply_cb, agent, NULL);

- agent->req->msg = l_dbus_message_ref(msg);
-
return MESH_ERROR_NONE;
}

@@ -519,8 +508,6 @@ static int request_key(struct mesh_agent *agent,

l_dbus_send_with_reply(dbus_get_bus(), msg, key_reply, agent, NULL);

- agent->req->msg = l_dbus_message_ref(msg);
-
return MESH_ERROR_NONE;
}

@@ -554,10 +541,7 @@ int mesh_agent_display_string(struct mesh_agent *agent, const char *str,
l_dbus_send_with_reply(dbus_get_bus(), msg, simple_reply, agent,
NULL);

- agent->req->msg = l_dbus_message_ref(msg);
-
return MESH_ERROR_NONE;
-
}

int mesh_agent_display_number(struct mesh_agent *agent, bool initiator,
--
2.21.0

2019-05-22 05:36:27

by Stotland, Inga

[permalink] [raw]
Subject: [PATCH BlueZ 1/2] mesh: Unreference pending D-Bus messages

This change results in proper cleanup of D-Bus messages for pending
replies: if l_dbus_message_ref() was called for a message, then
l_dbus_message_unref() must be called for the same message to completely
free the message resources.
---
mesh/mesh.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/mesh/mesh.c b/mesh/mesh.c
index 231a6bca4..bed8484f2 100644
--- a/mesh/mesh.c
+++ b/mesh/mesh.c
@@ -354,6 +354,9 @@ static void free_pending_join_call(bool failed)

mesh_agent_remove(join_pending->agent);

+ if (join_pending->msg)
+ l_dbus_message_unref(join_pending->msg);
+
if (failed)
node_remove(join_pending->node);

@@ -422,9 +425,6 @@ static void prov_disc_cb(struct l_dbus *bus, void *user_data)
if (!join_pending)
return;

- if (join_pending->msg)
- l_dbus_message_unref(join_pending->msg);
-
acceptor_cancel(&mesh);
join_pending->disc_watch = 0;

@@ -650,6 +650,7 @@ static void attach_ready_cb(void *user_data, int status, struct mesh_node *node)

done:
l_dbus_send(dbus_get_bus(), reply);
+ l_dbus_message_unref(pending_msg);
l_queue_remove(pending_queue, pending_msg);
}

@@ -727,6 +728,7 @@ static void create_network_ready_cb(void *user_data, int status,

done:
l_dbus_send(dbus_get_bus(), reply);
+ l_dbus_message_unref(pending_msg);
l_queue_remove(pending_queue, pending_msg);
}

--
2.21.0