Diff between fb5d75e1ab0e469e031ccaee1136b6e251594f45 and adc0103a067071ee03c8a728450ff4e211a0fbc8

Changed Files

File Additions Deletions Status
gdbus/watch.c +25 -25 modified

Full Patch

diff --git a/gdbus/watch.c b/gdbus/watch.c
index b60f650..447e486 100644
--- a/gdbus/watch.c
+++ b/gdbus/watch.c
@@ -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;