diff mbox series

hwsim: properly cleanup rules queue

Message ID 20230410171232.32739-1-prestwoj@gmail.com (mailing list archive)
State Accepted, archived
Headers show
Series hwsim: properly cleanup rules queue | expand

Commit Message

James Prestwood April 10, 2023, 5:12 p.m. UTC
After adding prefix matching the rule structure contained allocated
memory which was not being cleaned up on exit if rules still
remained in the list (removing the rule via DBus was done correctly)
---
 tools/hwsim.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

Comments

Denis Kenzior April 16, 2023, 4:30 p.m. UTC | #1
Hi James,

On 4/10/23 12:12, James Prestwood wrote:
> After adding prefix matching the rule structure contained allocated
> memory which was not being cleaned up on exit if rules still
> remained in the list (removing the rule via DBus was done correctly)
> ---
>   tools/hwsim.c | 22 +++++++++++++++-------
>   1 file changed, 15 insertions(+), 7 deletions(-)
> 

Applied, thanks.

Regards,
-Denis
diff mbox series

Patch

diff --git a/tools/hwsim.c b/tools/hwsim.c
index 7afbe4e7..47352ad4 100644
--- a/tools/hwsim.c
+++ b/tools/hwsim.c
@@ -2092,6 +2092,19 @@  static void setup_rule_manager_interface(struct l_dbus_interface *interface)
 				rule_add, "o", "", "path");
 }
 
+static void destroy_rule(void *user_data)
+{
+	struct hwsim_rule *rule = user_data;
+
+	if (rule->prefix)
+		l_free(rule->prefix);
+
+	if (rule->match)
+		l_free(rule->match);
+
+	l_free(rule);
+}
+
 static struct l_dbus_message *rule_remove(struct l_dbus *dbus,
 						struct l_dbus_message *message,
 						void *user_data)
@@ -2102,13 +2115,8 @@  static struct l_dbus_message *rule_remove(struct l_dbus *dbus,
 	path = rule_get_path(rule);
 	l_queue_remove(rules, rule);
 
-	if (rule->prefix)
-		l_free(rule->prefix);
+	destroy_rule(rule);
 
-	if (rule->match)
-		l_free(rule->match);
-
-	l_free(rule);
 	l_dbus_unregister_object(dbus, path);
 
 	return l_dbus_message_new_method_return(message);
@@ -3131,7 +3139,7 @@  int main(int argc, char *argv[])
 
 	l_dbus_destroy(dbus);
 	hwsim_radio_cache_cleanup();
-	l_queue_destroy(rules, l_free);
+	l_queue_destroy(rules, destroy_rule);
 
 	l_netlink_destroy(rtnl);