From a516090014d3379ff12f22d2e3105bdf3ca66703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 Nov 2024 17:33:53 +0100 Subject: [PATCH] backend/native: Handle NULL priv->startup_render_devices In add_drm_device, calling g_hash_table_insert with NULL for the hash table (which happens for any device added after mutter finished starting up) would presumably just drop the key/value pointers on the floor, leaking the string & MetaRenderDevice object referenced by them. Fixing this should help for the referenced issue. In meta_backend_native_take_render_device, g_hash_table_steal_extended would presumably return FALSE (and log a warning), so the behaviour would be "correct" by chance. Issue: https://gitlab.gnome.org/GNOME/mutter/-/issues/3785 Fixes: 58c3734d78e9 ("backend/native: Prepare render devices earlier than KMS") Part-of: --- src/backends/native/meta-backend-native.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c index 53cd3c9defb..f98114aaf4e 100644 --- a/src/backends/native/meta-backend-native.c +++ b/src/backends/native/meta-backend-native.c @@ -548,9 +548,12 @@ add_drm_device (MetaBackendNative *backend_native, if (!kms_device) return FALSE; - g_hash_table_insert (priv->startup_render_devices, - g_strdup (device_path), - g_steal_pointer (&render_device)); + if (priv->startup_render_devices) + { + g_hash_table_insert (priv->startup_render_devices, + g_strdup (device_path), + g_steal_pointer (&render_device)); + } gpu_kms = meta_gpu_kms_new (backend_native, kms_device, error); meta_backend_add_gpu (META_BACKEND (backend_native), META_GPU (gpu_kms)); @@ -1011,7 +1014,8 @@ meta_backend_native_take_render_device (MetaBackendNative *backend_native, MetaRenderDevice *render_device; g_autofree char *stolen_device_path = NULL; - if (g_hash_table_steal_extended (priv->startup_render_devices, + if (priv->startup_render_devices && + g_hash_table_steal_extended (priv->startup_render_devices, device_path, (gpointer *) &stolen_device_path, (gpointer *) &render_device)) -- GitLab