[mutter] kms-device: Handle impl device creation failure
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] kms-device: Handle impl device creation failure
- Date: Mon, 16 Sep 2019 16:34:54 +0000 (UTC)
commit d13cea6ccb73bac7e4ae0dd1f4b0fb6ab24a86ab
Author: Michal Lazo <xlazom00 gmail com>
Date: Mon Sep 16 16:34:39 2019 +0000
kms-device: Handle impl device creation failure
Properly free kms-device in case of invalid initialization
https://gitlab.gnome.org/GNOME/mutter/merge_requests/772
src/backends/native/meta-kms-device.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
---
diff --git a/src/backends/native/meta-kms-device.c b/src/backends/native/meta-kms-device.c
index be0362ddc..bda3859d1 100644
--- a/src/backends/native/meta-kms-device.c
+++ b/src/backends/native/meta-kms-device.c
@@ -211,6 +211,7 @@ meta_kms_device_new (MetaKms *kms,
return NULL;
device = g_object_new (META_TYPE_KMS_DEVICE, NULL);
+ device->kms = kms;
data = (CreateImplDeviceData) {
.device = device,
@@ -224,7 +225,6 @@ meta_kms_device_new (MetaKms *kms,
return NULL;
}
- device->kms = kms;
device->impl_device = data.out_impl_device;
device->flags = flags;
device->path = g_strdup (path);
@@ -266,27 +266,30 @@ meta_kms_device_finalize (GObject *object)
MetaBackend *backend = meta_kms_get_backend (device->kms);
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaLauncher *launcher = meta_backend_native_get_launcher (backend_native);
- FreeImplDeviceData data;
- GError *error = NULL;
g_list_free (device->crtcs);
g_list_free (device->connectors);
g_list_free (device->planes);
- data = (FreeImplDeviceData) {
- .impl_device = device->impl_device,
- };
- if (!meta_kms_run_impl_task_sync (device->kms, free_impl_device_in_impl, &data,
- &error))
+ if (device->impl_device)
{
- g_warning ("Failed to close KMS impl device: %s", error->message);
- g_error_free (error);
+ FreeImplDeviceData data;
+ GError *error = NULL;
+
+ data = (FreeImplDeviceData) {
+ .impl_device = device->impl_device,
+ };
+ if (!meta_kms_run_impl_task_sync (device->kms, free_impl_device_in_impl, &data,
+ &error))
+ {
+ g_warning ("Failed to close KMS impl device: %s", error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ meta_launcher_close_restricted (launcher, data.out_fd);
+ }
}
- else
- {
- meta_launcher_close_restricted (launcher, data.out_fd);
- }
-
G_OBJECT_CLASS (meta_kms_device_parent_class)->finalize (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]