summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2020-03-11 10:46:48 +0000
committerJonas Ådahl <jadahl@gmail.com>2020-03-12 20:45:55 +0000
commit7655a63af6b27fab28aa1f7f3595f8cc055d56cf (patch)
tree83d05a32c28cd38a6e84e2df68c3da46de57de25
parenta5b5e95ad948e6cf7aafded66040bb35c156d617 (diff)
downloadmutter-7655a63af6b27fab28aa1f7f3595f8cc055d56cf.tar.gz
kms-impl-device: Clean up state if drm resources disappear
It may happen that drmModeGetResources() starts returning NULL. Handle this gracefully by removing all connectors, CRTCs and planes making the device in practice defunct. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1121 (cherry picked from commit 5319949a45bb22f5c998b485e955c1ddd13810f3)
-rw-r--r--src/backends/native/meta-kms-impl-device.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c
index 922aca103..f1d78eaa1 100644
--- a/src/backends/native/meta-kms-impl-device.c
+++ b/src/backends/native/meta-kms-impl-device.c
@@ -326,6 +326,16 @@ meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
meta_assert_in_kms_impl (meta_kms_impl_get_kms (impl_device->impl));
drm_resources = drmModeGetResources (impl_device->fd);
+ if (!drm_resources)
+ {
+ g_list_free_full (impl_device->planes, g_object_unref);
+ g_list_free_full (impl_device->crtcs, g_object_unref);
+ g_list_free_full (impl_device->connectors, g_object_unref);
+ impl_device->planes = NULL;
+ impl_device->crtcs = NULL;
+ impl_device->connectors = NULL;
+ return;
+ }
update_connectors (impl_device, drm_resources);