Backport MR #498 for spinner bug, plus two crasher fixes
Resolves: #1692135
This commit is contained in:
parent
10980c1402
commit
2e1cec2052
28
0001-core-Remove-startup-sequences-after-timeout.patch
Normal file
28
0001-core-Remove-startup-sequences-after-timeout.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 639be849cd80b38567f6abb0279bef59f17ac5ca Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Mon, 18 Mar 2019 11:59:26 +0100
|
||||
Subject: [PATCH 1/3] core: Remove startup sequences after timeout
|
||||
|
||||
The complete/remove semantics were split to cater for presenting windows,
|
||||
so we must now separately do both here.
|
||||
|
||||
Related: https://gitlab.gnome.org/GNOME/mutter/issues/501
|
||||
---
|
||||
src/core/startup-notification.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/core/startup-notification.c b/src/core/startup-notification.c
|
||||
index 8bcb0f385..d2d0d1362 100644
|
||||
--- a/src/core/startup-notification.c
|
||||
+++ b/src/core/startup-notification.c
|
||||
@@ -454,6 +454,7 @@ startup_sequence_timeout (void *data)
|
||||
meta_startup_sequence_get_id (sequence));
|
||||
|
||||
meta_startup_sequence_complete (sequence);
|
||||
+ meta_startup_notification_remove_sequence (sn, sequence);
|
||||
}
|
||||
|
||||
g_slist_free (ctod.list);
|
||||
--
|
||||
2.21.0
|
||||
|
130
0002-renderer-native-Make-EGL-initialization-failure-not-.patch
Normal file
130
0002-renderer-native-Make-EGL-initialization-failure-not-.patch
Normal file
@ -0,0 +1,130 @@
|
||||
From 1074040be3b89ffa7d6fb15a3c1ef35e141e15d1 Mon Sep 17 00:00:00 2001
|
||||
From: Pekka Paalanen <pekka.paalanen@collabora.com>
|
||||
Date: Wed, 3 Apr 2019 13:11:45 +0300
|
||||
Subject: [PATCH 2/3] renderer/native: Make EGL initialization failure not
|
||||
fatal
|
||||
|
||||
The failure to initialize EGL does not necessarily mean the KMS device cannot
|
||||
be used. The device could still be used as a "secondary GPU" with the CPU copy
|
||||
mode.
|
||||
|
||||
If meta_renderer_native_create_renderer_gpu_data () fails,
|
||||
meta_renderer_native_get_gpu_data () will return NULL, which may cause crashes.
|
||||
This patch removes most of the failures, but does not fix the NULL dereferences
|
||||
that will still happen if creating gpu data fails.
|
||||
|
||||
This patch reorders create_renderer_gpu_data_gbm () so that it fails hard only
|
||||
if GBM device cannot be created, and otherwise always returns an initialized
|
||||
gpu data structure. Users of the gpu data structure are responsible for
|
||||
checking egl_display validity.
|
||||
|
||||
The GBM device creation failure is a hard failure because presumably GBM is
|
||||
necessary for cursors.
|
||||
|
||||
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/542
|
||||
https://gitlab.gnome.org/GNOME/mutter/merge_requests/521
|
||||
---
|
||||
src/backends/native/meta-renderer-native.c | 62 ++++++++++++++--------
|
||||
1 file changed, 40 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||
index 771ca0872..c7483f3cd 100644
|
||||
--- a/src/backends/native/meta-renderer-native.c
|
||||
+++ b/src/backends/native/meta-renderer-native.c
|
||||
@@ -3698,16 +3698,13 @@ gpu_kms_is_hardware_rendering (MetaRendererNative *renderer_native,
|
||||
return data->secondary.is_hardware_rendering;
|
||||
}
|
||||
|
||||
-static MetaRendererNativeGpuData *
|
||||
-create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
|
||||
- MetaGpuKms *gpu_kms,
|
||||
- GError **error)
|
||||
+static EGLDisplay
|
||||
+init_gbm_egl_display (MetaRendererNative *renderer_native,
|
||||
+ struct gbm_device *gbm_device,
|
||||
+ GError **error)
|
||||
{
|
||||
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
|
||||
- struct gbm_device *gbm_device;
|
||||
EGLDisplay egl_display;
|
||||
- int kms_fd;
|
||||
- MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
|
||||
if (!meta_egl_has_extensions (egl, EGL_NO_DISPLAY, NULL,
|
||||
"EGL_MESA_platform_gbm",
|
||||
@@ -3719,9 +3716,31 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
|
||||
g_set_error (error, G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"Missing extension for GBM renderer: EGL_KHR_platform_gbm");
|
||||
- return NULL;
|
||||
+ return EGL_NO_DISPLAY;
|
||||
}
|
||||
|
||||
+ egl_display = meta_egl_get_platform_display (egl,
|
||||
+ EGL_PLATFORM_GBM_KHR,
|
||||
+ gbm_device, NULL, error);
|
||||
+ if (egl_display == EGL_NO_DISPLAY)
|
||||
+ return EGL_NO_DISPLAY;
|
||||
+
|
||||
+ if (!meta_egl_initialize (egl, egl_display, error))
|
||||
+ return EGL_NO_DISPLAY;
|
||||
+
|
||||
+ return egl_display;
|
||||
+}
|
||||
+
|
||||
+static MetaRendererNativeGpuData *
|
||||
+create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
|
||||
+ MetaGpuKms *gpu_kms,
|
||||
+ GError **error)
|
||||
+{
|
||||
+ struct gbm_device *gbm_device;
|
||||
+ int kms_fd;
|
||||
+ MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
+ g_autoptr (GError) local_error = NULL;
|
||||
+
|
||||
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
|
||||
|
||||
gbm_device = gbm_create_device (kms_fd);
|
||||
@@ -3733,26 +3752,25 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- egl_display = meta_egl_get_platform_display (egl,
|
||||
- EGL_PLATFORM_GBM_KHR,
|
||||
- gbm_device, NULL, error);
|
||||
- if (egl_display == EGL_NO_DISPLAY)
|
||||
- {
|
||||
- gbm_device_destroy (gbm_device);
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- if (!meta_egl_initialize (egl, egl_display, error))
|
||||
- return NULL;
|
||||
-
|
||||
renderer_gpu_data = meta_create_renderer_native_gpu_data (gpu_kms);
|
||||
renderer_gpu_data->renderer_native = renderer_native;
|
||||
renderer_gpu_data->gbm.device = gbm_device;
|
||||
renderer_gpu_data->mode = META_RENDERER_NATIVE_MODE_GBM;
|
||||
- renderer_gpu_data->egl_display = egl_display;
|
||||
|
||||
- init_secondary_gpu_data (renderer_gpu_data);
|
||||
+ renderer_gpu_data->egl_display = init_gbm_egl_display (renderer_native,
|
||||
+ gbm_device,
|
||||
+ &local_error);
|
||||
+ if (renderer_gpu_data->egl_display == EGL_NO_DISPLAY)
|
||||
+ {
|
||||
+ g_debug ("GBM EGL init for %s failed: %s",
|
||||
+ meta_gpu_kms_get_file_path (gpu_kms),
|
||||
+ local_error->message);
|
||||
|
||||
+ init_secondary_gpu_data_cpu (renderer_gpu_data);
|
||||
+ return renderer_gpu_data;
|
||||
+ }
|
||||
+
|
||||
+ init_secondary_gpu_data (renderer_gpu_data);
|
||||
return renderer_gpu_data;
|
||||
}
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
@ -0,0 +1,59 @@
|
||||
From b09318fd75e1d4644381e7080105da18726bbdb9 Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||
Date: Mon, 15 Apr 2019 14:55:45 +0200
|
||||
Subject: [PATCH 3/3] wayland/output: Set user data of xdg_output resource
|
||||
|
||||
mutter would randomly crash in `send_xdg_output_events()` when changing
|
||||
the fractional scaling:
|
||||
|
||||
wl_resource_post_event ()
|
||||
zxdg_output_v1_send_logical_size ()
|
||||
send_xdg_output_events ()
|
||||
wayland_output_update_for_output ()
|
||||
meta_wayland_compositor_update_outputs ()
|
||||
on_monitors_changed ()
|
||||
g_closure_invoke ()
|
||||
signal_emit_unlocked_R ()
|
||||
g_signal_emit_valist ()
|
||||
_signal_emit ()
|
||||
meta_monitor_manager_notify_monitors_changed ()
|
||||
meta_monitor_manager_rebuild ()
|
||||
|
||||
This is because the xdg-output resource got freed but wasn't removed
|
||||
from the list of resources.
|
||||
|
||||
Fix this by setting the user data of the xdg-output resource to the
|
||||
corresponding `MetaWaylandOutput` so that the xdg-output resource
|
||||
destructor can remove it from the list of resources.
|
||||
|
||||
https://gitlab.gnome.org/GNOME/mutter/merge_requests/538
|
||||
---
|
||||
src/wayland/meta-wayland-outputs.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c
|
||||
index 7695d86af..099e87ab9 100644
|
||||
--- a/src/wayland/meta-wayland-outputs.c
|
||||
+++ b/src/wayland/meta-wayland-outputs.c
|
||||
@@ -624,14 +624,14 @@ meta_xdg_output_manager_get_xdg_output (struct wl_client *client,
|
||||
wl_resource_get_version (resource),
|
||||
id);
|
||||
|
||||
- wl_resource_set_implementation (xdg_output_resource,
|
||||
- &meta_xdg_output_interface,
|
||||
- NULL, meta_xdg_output_destructor);
|
||||
-
|
||||
wayland_output = wl_resource_get_user_data (output);
|
||||
if (!wayland_output)
|
||||
return;
|
||||
|
||||
+ wl_resource_set_implementation (xdg_output_resource,
|
||||
+ &meta_xdg_output_interface,
|
||||
+ wayland_output, meta_xdg_output_destructor);
|
||||
+
|
||||
wayland_output->xdg_output_resources =
|
||||
g_list_prepend (wayland_output->xdg_output_resources, xdg_output_resource);
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
16
mutter.spec
16
mutter.spec
@ -25,6 +25,18 @@ Patch1: 0001-build-Don-t-use-absolute-paths-with-subdir-keyword.patch
|
||||
# Backport work-around for hangul text input bug (rhbz#1632981)
|
||||
Patch2: 0001-wayland-Defer-text_input.done-on-an-idle.patch
|
||||
|
||||
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/498 fixes
|
||||
# https://gitlab.gnome.org/GNOME/mutter/issues/501 /
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1692135
|
||||
Patch3: 0001-core-Remove-startup-sequences-after-timeout.patch
|
||||
|
||||
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/521 fixes
|
||||
# https://gitlab.gnome.org/GNOME/mutter/issues/542 (crasher)
|
||||
Patch4: 0002-renderer-native-Make-EGL-initialization-failure-not-.patch
|
||||
|
||||
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/538 (crash fix)
|
||||
Patch5: 0003-wayland-output-Set-user-data-of-xdg_output-resource.patch
|
||||
|
||||
BuildRequires: chrpath
|
||||
BuildRequires: pango-devel
|
||||
BuildRequires: startup-notification-devel
|
||||
@ -166,6 +178,10 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||
|
||||
%changelog
|
||||
* Wed Apr 17 2019 Adam Williamson <awilliam@redhat.com> - 3.32.0-4
|
||||
- Backport MR #498 for spinner bug, plus two crasher fixes
|
||||
Resolves: #1692135
|
||||
|
||||
* Tue Apr 16 2019 Adam Williamson <awilliam@redhat.com> - 3.32.0-3
|
||||
- Rebuild with Meson fix for #1699099
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user