diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2020-03-11 10:46:48 +0000 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2020-03-12 20:45:55 +0000 |
commit | 7655a63af6b27fab28aa1f7f3595f8cc055d56cf (patch) | |
tree | 83d05a32c28cd38a6e84e2df68c3da46de57de25 | |
parent | a5b5e95ad948e6cf7aafded66040bb35c156d617 (diff) | |
download | mutter-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.c | 10 |
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); |