From 17ca0ef7bb5972dd67474fe5dedd58345dadf5c3 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Wed, 5 Nov 2025 14:10:46 +0000 Subject: [PATCH 1/5] =?UTF-8?q?m-mpris:=20=E2=80=98items=E2=80=99=20is=20a?= =?UTF-8?q?=20GHashTable,=20not=20a=20GObject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That did fun things to my session that did. --- modules/module-mpris.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/module-mpris.c b/modules/module-mpris.c index 10ee8154..113fbba4 100644 --- a/modules/module-mpris.c +++ b/modules/module-mpris.c @@ -128,7 +128,7 @@ static void players_unref (Players *players) return; g_mutex_clear (&players->lock); - g_clear_object (&players->items); + g_clear_pointer (&players->items, g_hash_table_unref); g_clear_object (&players->conn); g_clear_object (&players->cancellable); g_free (players); From b3cb42b72a1bad42163dd7b6962bd59a7a306346 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Wed, 5 Nov 2025 14:12:36 +0000 Subject: [PATCH 2/5] =?UTF-8?q?m-mpris:=20=E2=80=98Item=E2=80=99s=20are=20?= =?UTF-8?q?allocated=20with=20GLib?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As are the string copies they point to, don't leak them and free them the right way. --- modules/module-mpris.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/module-mpris.c b/modules/module-mpris.c index 113fbba4..b59dc725 100644 --- a/modules/module-mpris.c +++ b/modules/module-mpris.c @@ -98,8 +98,10 @@ static void item_free (gpointer data) { Item *item = data; - free(item->desktop_entry); - free(item); + g_clear_pointer (&item->desktop_entry, g_free); + g_clear_pointer (&item->flatpak_app_id, g_free); + g_clear_pointer (&item->flatpak_instance_id, g_free); + g_free (item); } static Players *players_new (GDBusConnection *conn) @@ -170,8 +172,8 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (ItemUpdate, item_update_free) static void item_get_flatpak_app_id (ItemUpdate *update, Item *item) { - spa_autofree char *app_id = NULL; - spa_autofree char *instance_id = NULL; + g_autofree char *app_id = NULL; + g_autofree char *instance_id = NULL; int res; g_clear_pointer (&item->flatpak_app_id, g_free); @@ -183,7 +185,7 @@ static void item_get_flatpak_app_id (ItemUpdate *update, Item *item) res = pw_check_flatpak (item->pid, &app_id, &instance_id, NULL); if (res < 0) { wp_info ("%p: failed to get Flatpak status for '%s': %d (%s)", update->players, update->bus_name, - -res, spa_strerror (res)); + -res, g_strerror (res)); return; } From 860ecc583e3f602a8b88233cb8dcfe5830024e71 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Wed, 5 Nov 2025 14:49:37 +0000 Subject: [PATCH 3/5] m-mpris: Only initialise the builder once --- modules/module-mpris.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/module-mpris.c b/modules/module-mpris.c index b59dc725..7913c60a 100644 --- a/modules/module-mpris.c +++ b/modules/module-mpris.c @@ -531,9 +531,7 @@ wp_mpris_plugin_disable (WpPlugin * plugin) static gpointer wp_mpris_plugin_get_players (WpMprisPlugin *self) { - g_auto (GVariantBuilder) b = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_ARRAY); - - g_variant_builder_init (&b, G_VARIANT_TYPE ("av")); + g_auto (GVariantBuilder) b = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("av")); if (self->players) { g_autoptr (GMutexLocker) locker = g_mutex_locker_new (&self->players->lock); From 6c4342123b8f9752634102cea316a1122b32ee3b Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Wed, 5 Nov 2025 14:50:04 +0000 Subject: [PATCH 4/5] m-mpris: We must chain up on finalize --- modules/module-mpris.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/module-mpris.c b/modules/module-mpris.c index 7913c60a..6e315527 100644 --- a/modules/module-mpris.c +++ b/modules/module-mpris.c @@ -428,6 +428,8 @@ wp_mpris_plugin_operation_finalize (GObject *object) WpMprisPluginOperation *self = WP_MPRIS_PLUGIN_OPERATION (object); g_clear_object (&self->conn); + + G_OBJECT_CLASS (wp_mpris_plugin_operation_parent_class)->finalize (object); } static void From 91e07861dd9e98a2e42915d08e5c66f786ae3745 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Wed, 5 Nov 2025 14:51:47 +0000 Subject: [PATCH 5/5] m-mpris: Check variant type directly --- modules/module-mpris.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/module-mpris.c b/modules/module-mpris.c index 6e315527..39889886 100644 --- a/modules/module-mpris.c +++ b/modules/module-mpris.c @@ -238,7 +238,7 @@ static void item_desktop_entry_cb (GObject *source_object, GAsyncResult* res, gp } g_variant_get (result, "(v)", &value); - if (!g_str_equal(g_variant_get_type_string (value), "s")) { + if (!g_variant_is_of_type (value, G_VARIANT_TYPE_STRING)) { wp_info ("%p: bad value for DesktopEntry for '%s'", update->players, update->bus_name); return; }