gdbus: Fix Memory Leak
PATCH v2 1/4 gdbus: Fix Memory Leak
From: Saurav Babu <[email protected]>
Members of data are allocated memory but not freed only data is freed
---
Hi,
This patch came up on the ConnMan mailing list, applies to Bluez too.
Patrik
gdbus/watch.c | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-)
gdbus/watch.c +25 -25
@@ -204,6 +204,30 @@ static gboolean remove_match(struct filter_data *data)return TRUE; } +static void filter_data_free (struct filter_data *data) +{ +GSList *l; + +/* Remove filter if there are no listeners left for the connection */ +if (filter_data_find (data->connection) ==NULL ) +dbus_connection_remove_filter (data->connection, message_filter, +NULL ); + +for (l = data->callbacks; l !=NULL ; l = l->next) +g_free (l->data); + +g_slist_free (data->callbacks); +g_dbus_remove_watch (data->connection, data->name_watch); +g_free (data->name); +g_free (data->owner); +g_free (data->path); +g_free (data->interface); +g_free (data->member); +g_free (data->argument); +dbus_connection_unref (data->connection); +g_free (data); +} + static struct filter_data *filter_data_get(DBusConnection *connection, DBusHandleMessageFunction filter, const char *sender,
@@ -248,7 +272,7 @@ proceed: data->argument =g_strdup (argument);if (!add_match (data, filter)) { -g_free (data); +filter_data_free (data);return NULL ; }
@@ -277,30 +301,6 @@ static struct filter_callback *filter_data_find_callback(return NULL ; } -static void filter_data_free (struct filter_data *data) -{ -GSList *l; - -/* Remove filter if there are no listeners left for the connection */ -if (filter_data_find (data->connection) ==NULL ) -dbus_connection_remove_filter (data->connection, message_filter, -NULL ); - -for (l = data->callbacks; l !=NULL ; l = l->next) -g_free (l->data); - -g_slist_free (data->callbacks); -g_dbus_remove_watch (data->connection, data->name_watch); -g_free (data->name); -g_free (data->owner); -g_free (data->path); -g_free (data->interface); -g_free (data->member); -g_free (data->argument); -dbus_connection_unref (data->connection); -g_free (data); -} -static void filter_data_call_and_free (struct filter_data *data) {GSList *l;
Signature · 6 lines
1.9.1 _______________________________________________ connman mailing list [email protected] https://lists.01.org/mailman/listinfo/connman
Hi,
Quoted 91 lines · Patrik Flykt
From: Saurav Babu <[email protected]>
Members of data are allocated memory but not freed only data is freed
---Hi,This patch came up on the ConnMan mailing list, applies to Bluez too.
Patrik
gdbus/watch.c | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-)gdbus/watch.c +25
-26@@ -204,6 +204,30 @@ static gboolean remove_match(struct filter_data *data)return TRUE; } +static void filter_data_free (struct filter_data *data) +{ +GSList *l; + +/* Remove filter if there are no listeners left for the connection */ +if (filter_data_find (data->connection) ==NULL ) +dbus_connection_remove_filter (data->connection, message_filter, +NULL ); + +for (l = data->callbacks; l !=NULL ; l = l->next) +g_free (l->data); + +g_slist_free (data->callbacks); +g_dbus_remove_watch (data->connection, data->name_watch); +g_free (data->name); +g_free (data->owner); +g_free (data->path); +g_free (data->interface); +g_free (data->member); +g_free (data->argument); +dbus_connection_unref (data->connection); +g_free (data); +} + static struct filter_data *filter_data_get(DBusConnection *connection, DBusHandleMessageFunction filter, const char *sender,@@ -248,7 +272,7 @@ proceed: data->argument =g_strdup (argument);if (!add_match (data, filter)) { -g_free (data); +filter_data_free (data);return NULL ; }@@ -277,30 +301,6 @@ static struct filter_callback *filter_data_find_callback(return NULL ; } -static void filter_data_free (struct filter_data *data) -{ -GSList *l; - -/* Remove filter if there are no listeners left for the connection */ -if (filter_data_find (data->connection) ==NULL ) -dbus_connection_remove_filter (data->connection, message_filter, -NULL ); - -for (l = data->callbacks; l !=NULL ; l = l->next) -g_free (l->data); - -g_slist_free (data->callbacks); -g_dbus_remove_watch (data->connection, data->name_watch); -g_free (data->name); -g_free (data->owner); -g_free (data->path); -g_free (data->interface); -g_free (data->member); -g_free (data->argument); -dbus_connection_unref (data->connection); -g_free (data); -} -static void filter_data_call_and_free (struct filter_data *data) {GSList *l; --
Quoted 1 line
1.9.1
This has been applied to BlueZ.