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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4136>
This commit is contained in:
Michel Dänzer 2024-11-15 17:33:53 +01:00 committed by Marge Bot
parent 206ec7b46b
commit a516090014

View File

@ -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))