Backport upstream patch to fix a compositor crash (#2120470)
This commit is contained in:
parent
eff03142bf
commit
01bfa2e36f
76
2592.patch
Normal file
76
2592.patch
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
From ed516dde899f87b19f3dd0ed4613b692f778d437 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Tue, 23 Aug 2022 21:56:02 +0200
|
||||||
|
Subject: [PATCH] wayland: Add destruction listener to activation token surface
|
||||||
|
|
||||||
|
In the timespan between an activation token being created and the
|
||||||
|
token being used by the activated application, the surface that started
|
||||||
|
the activation request may end up destroyed/disposed.
|
||||||
|
|
||||||
|
In that case, the token would be left with a stale surface pointer,
|
||||||
|
maybe causing crashes later on. Set up a destroy notification listener
|
||||||
|
so that we do know to unset the token surface if that situation arises,
|
||||||
|
this will result in Mutter not considering the token activatable, thus
|
||||||
|
maybe issuing the "Application needs attention" notification if the
|
||||||
|
activated surface did not immediately get focus. In any case this is
|
||||||
|
better than a compositor crash.
|
||||||
|
|
||||||
|
A typical situation where this may happen is "Open With..." dialogs,
|
||||||
|
since those don't live long after launching the application.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2390
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2592>
|
||||||
|
---
|
||||||
|
src/wayland/meta-wayland-activation.c | 15 +++++++++++++++
|
||||||
|
1 file changed, 15 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-wayland-activation.c b/src/wayland/meta-wayland-activation.c
|
||||||
|
index 73faa19142..b7035ab5ce 100644
|
||||||
|
--- a/src/wayland/meta-wayland-activation.c
|
||||||
|
+++ b/src/wayland/meta-wayland-activation.c
|
||||||
|
@@ -47,6 +47,7 @@ struct _MetaXdgActivationToken
|
||||||
|
MetaWaylandSeat *seat;
|
||||||
|
MetaWaylandActivation *activation;
|
||||||
|
MetaStartupSequence *sequence;
|
||||||
|
+ struct wl_listener surface_listener;
|
||||||
|
char *app_id;
|
||||||
|
char *token;
|
||||||
|
uint32_t serial;
|
||||||
|
@@ -94,6 +95,8 @@ token_set_surface (struct wl_client *client,
|
||||||
|
MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
|
||||||
|
|
||||||
|
token->surface = surface;
|
||||||
|
+ wl_resource_add_destroy_listener (surface_resource,
|
||||||
|
+ &token->surface_listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -216,6 +219,17 @@ meta_xdg_activation_token_free (MetaXdgActivationToken *token)
|
||||||
|
g_free (token);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+token_handle_surface_destroy (struct wl_listener *listener,
|
||||||
|
+ void *data)
|
||||||
|
+{
|
||||||
|
+ MetaXdgActivationToken *token = wl_container_of (listener, token,
|
||||||
|
+ surface_listener);
|
||||||
|
+
|
||||||
|
+ token->surface = NULL;
|
||||||
|
+ wl_list_remove (&token->surface_listener.link);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_wayland_activation_token_create_new_resource (MetaWaylandActivation *activation,
|
||||||
|
struct wl_client *client,
|
||||||
|
@@ -237,6 +251,7 @@ meta_wayland_activation_token_create_new_resource (MetaWaylandActivation *activa
|
||||||
|
wl_resource_set_user_data (token_resource, token);
|
||||||
|
wl_list_insert (&activation->token_list,
|
||||||
|
wl_resource_get_link (token_resource));
|
||||||
|
+ token->surface_listener.notify = token_handle_surface_destroy;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Name: mutter
|
Name: mutter
|
||||||
Version: 43~beta
|
Version: 43~beta
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: Window and compositing manager based on Clutter
|
Summary: Window and compositing manager based on Clutter
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -28,6 +28,10 @@ Patch2: mutter-42.alpha-disable-tegra.patch
|
|||||||
|
|
||||||
Patch3: 0001-build-Add-missing-include.patch
|
Patch3: 0001-build-Add-missing-include.patch
|
||||||
|
|
||||||
|
# Backported from upstream
|
||||||
|
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2592
|
||||||
|
Patch4: 2592.patch
|
||||||
|
|
||||||
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.41.0
|
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.41.0
|
||||||
BuildRequires: pkgconfig(sm)
|
BuildRequires: pkgconfig(sm)
|
||||||
BuildRequires: pkgconfig(libwacom)
|
BuildRequires: pkgconfig(libwacom)
|
||||||
@ -171,6 +175,9 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
|||||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Aug 24 2022 Kalev Lember <klember@redhat.com> - 43~beta-2
|
||||||
|
- Backport upstream patch to fix a compositor crash (#2120470)
|
||||||
|
|
||||||
* Wed Aug 10 2022 Florian Müllner <fmuellner@redhat.com> - 43~beta-1
|
* Wed Aug 10 2022 Florian Müllner <fmuellner@redhat.com> - 43~beta-1
|
||||||
- Update to 43.beta
|
- Update to 43.beta
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user