diff --git a/pkgs/desktops/gnome/core/mutter/43/default.nix b/pkgs/desktops/gnome/core/mutter/43/default.nix index f3d18b67c459..5953d00de45f 100644 --- a/pkgs/desktops/gnome/core/mutter/43/default.nix +++ b/pkgs/desktops/gnome/core/mutter/43/default.nix @@ -66,6 +66,14 @@ stdenv.mkDerivation (finalAttrs: { url = "https://gitlab.gnome.org/GNOME/mutter/-/commit/285a5a4d54ca83b136b787ce5ebf1d774f9499d5.patch"; sha256 = "/npUE3idMSTVlFptsDpZmGWjZ/d2gqruVlJKq4eF4xU="; }) + + # GLib 2.76 switches from using its own slice allocator to using the system malloc instead. + # This makes dragging window between workspace in multitasking view crashes Pantheon's Gala. + # Inspiration https://github.com/mate-desktop/mate-desktop/pull/538 + # Backtrace https://github.com/elementary/gala/issues/1580 + # Upstream report https://gitlab.gnome.org/GNOME/mutter/-/issues/2495 + # The patch will not apply on 44.0+, make sure this is fixed when trying to clean this up. + ./glib-2-76-gala-crash.patch ]; mesonFlags = [ diff --git a/pkgs/desktops/gnome/core/mutter/43/glib-2-76-gala-crash.patch b/pkgs/desktops/gnome/core/mutter/43/glib-2-76-gala-crash.patch new file mode 100644 index 000000000000..895cabcdbdb4 --- /dev/null +++ b/pkgs/desktops/gnome/core/mutter/43/glib-2-76-gala-crash.patch @@ -0,0 +1,25 @@ +diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c +index d34c8f59f..8835a6a33 100644 +--- a/clutter/clutter/clutter-actor.c ++++ b/clutter/clutter/clutter-actor.c +@@ -12304,7 +12304,7 @@ clutter_actor_run_actions (ClutterActor *self, + ClutterEventPhase phase) + { + ClutterActorPrivate *priv; +- const GList *actions, *l; ++ const GList *actions, *l, *next; + gboolean retval = CLUTTER_EVENT_PROPAGATE; + + priv = self->priv; +@@ -12313,9 +12313,10 @@ clutter_actor_run_actions (ClutterActor *self, + + actions = _clutter_meta_group_peek_metas (priv->actions); + +- for (l = actions; l; l = l->next) ++ for (l = actions; l; l = next) + { + ClutterAction *action = l->data; ++ next = l->next; + ClutterEventPhase action_phase; + + action_phase = clutter_action_get_phase (action);