Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mutter for openSUSE:Factory checked in at 2022-03-28 17:00:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mutter (Old) and /work/SRC/openSUSE:Factory/.mutter.new.1900 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mutter" Mon Mar 28 17:00:08 2022 rev:182 rq:964805 version:42.0 Changes: -------- --- /work/SRC/openSUSE:Factory/mutter/mutter.changes 2022-03-23 20:17:53.362446161 +0100 +++ /work/SRC/openSUSE:Factory/.mutter.new.1900/mutter.changes 2022-03-28 17:00:48.652989728 +0200 @@ -1,0 +2,8 @@ +Thu Mar 24 02:40:02 UTC 2022 - Alynx Zhou <alynx.z...@suse.com> + +- Add mutter-bail-out-on-reentry-into-map-unmap.patch: This fixes + gnome-shell crash when dragging close button in overview by + bailing out on reentry into map/unmap() (bsc#1197350, + glgo#GNOME/mutter!2299). + +------------------------------------------------------------------- New: ---- mutter-bail-out-on-reentry-into-map-unmap.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mutter.spec ++++++ --- /var/tmp/diff_new_pack.AbQo41/_old 2022-03-28 17:00:50.488992222 +0200 +++ /var/tmp/diff_new_pack.AbQo41/_new 2022-03-28 17:00:50.488992222 +0200 @@ -38,6 +38,8 @@ Patch1: mutter-disable-cvt-s390x.patch # PATCH-FIX-OPENSUSE mutter-window-actor-Special-case-shaped-Java-windows.patch -- window-actor: Special-case shaped Java windows Patch2: mutter-window-actor-Special-case-shaped-Java-windows.patch +# PATCH-FIX-UPSTREAM mutter-bail-out-on-reentry-into-map-unmap.patch bsc#1197350, glgo#GNOME/mutter!2299 alynx.z...@suse.com -- Bail out on reentry into map/unmap() in Clutter +Patch3: mutter-bail-out-on-reentry-into-map-unmap.patch ## SLE-only patches start at 1000 # PATCH-FEATURE-SLE mutter-SLE-bell.patch FATE#316042 bnc#889218 idon...@suse.com -- make audible bell work out of the box. @@ -145,6 +147,7 @@ %patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 # SLE-only patches and translations. %if 0%{?sle_version} ++++++ mutter-bail-out-on-reentry-into-map-unmap.patch ++++++ >From 53de072634527c5f433911553d8f921a6e119ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <ver...@v0yd.nl> Date: Wed, 16 Feb 2022 22:34:12 +0100 Subject: [PATCH] clutter: Bail out and warn on reentry into mapping/unmapping cycle There's a bunch of crashes right now where the assertions in clutter_actor_set_mapped() after calling the map/unmap() vfuncs are failing. The only way this can happen is by re-entering clutter_actor_set_mapped() during the map/unmap recursion. The reason for those crashes is that the shell hides/shows some actors in response to crossing events and key-focus changes. These in turn get triggered by the newly introduced ungrabbing of ClutterGrabs when an actor gets unmapped, which triggers GRAB_NOTIFY crossing events and key-focus changes. Since these situations are hardly avoidable (it's a valid use-case to hide/show something in response to a crossing/key-focus event), catch the set_mapped() call early while we reenter the mapping machinery and log a warning instead of crashing. Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3165 --- clutter/clutter/clutter-actor.c | 6 ++++++ clutter/clutter/clutter-private.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 59345a7252..bae11088dd 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -1264,6 +1264,10 @@ clutter_actor_set_mapped (ClutterActor *self, if (CLUTTER_ACTOR_IS_MAPPED (self) == mapped) return; + g_return_if_fail (!CLUTTER_ACTOR_IN_MAP_UNMAP (self)); + + CLUTTER_SET_PRIVATE_FLAGS (self, CLUTTER_IN_MAP_UNMAP); + if (mapped) { CLUTTER_ACTOR_GET_CLASS (self)->map (self); @@ -1274,6 +1278,8 @@ clutter_actor_set_mapped (ClutterActor *self, CLUTTER_ACTOR_GET_CLASS (self)->unmap (self); g_assert (!CLUTTER_ACTOR_IS_MAPPED (self)); } + + CLUTTER_UNSET_PRIVATE_FLAGS (self, CLUTTER_IN_MAP_UNMAP); } /* this function updates the mapped and realized states according to diff --git a/clutter/clutter/clutter-private.h b/clutter/clutter/clutter-private.h index 377b318798..117902a35f 100644 --- a/clutter/clutter/clutter-private.h +++ b/clutter/clutter/clutter-private.h @@ -69,6 +69,7 @@ typedef struct _ClutterMainContext ClutterMainContext; #define CLUTTER_ACTOR_IN_PREF_WIDTH(a) ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PREF_WIDTH) != FALSE) #define CLUTTER_ACTOR_IN_PREF_HEIGHT(a) ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PREF_HEIGHT) != FALSE) #define CLUTTER_ACTOR_IN_PREF_SIZE(a) ((CLUTTER_PRIVATE_FLAGS (a) & (CLUTTER_IN_PREF_HEIGHT|CLUTTER_IN_PREF_WIDTH)) != FALSE) +#define CLUTTER_ACTOR_IN_MAP_UNMAP(a) ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_MAP_UNMAP) != FALSE) #define CLUTTER_PARAM_READABLE (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS) #define CLUTTER_PARAM_WRITABLE (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS) @@ -105,6 +106,8 @@ typedef enum /* Used to avoid recursion */ CLUTTER_IN_RELAYOUT = 1 << 7, + + CLUTTER_IN_MAP_UNMAP = 1 << 8, } ClutterPrivateFlags; /* -- GitLab