take fix that is upstream that fixes crash that occurs. this happened

for me by using dash to dock.  this seems to resolv the issue.
This commit is contained in:
toppk 2019-09-27 01:20:07 -04:00
parent 31b0b839af
commit a5399ece23
No known key found for this signature in database
GPG Key ID: 6C771538FA770FB6
4 changed files with 175 additions and 1 deletions

View File

@ -0,0 +1,67 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Fri, 20 Sep 2019 16:21:00 +0200
Subject: clutter/actor: Cancel delayed timelines on removal
Delayed clutter timelines might be removed while they are still in the
process of being executed, but if they are not playing yet their delay
timeout won't be stopped, causing them to be executed anyway, leading to a
potential crash.
In fact if something else keeps a reference on the timelines (i.e. gjs), the
dispose vfunc delay cancellation won't take effect, causing the timelines to
be started and added to the master clock.
To avoid this, expose clutter_timeline_cancel_delay() function and call it
if a timeline is not playing but has a delay set.
Fixes https://gitlab.gnome.org/GNOME/mutter/issues/815
https://gitlab.gnome.org/GNOME/mutter/merge_requests/805
Origin: upstream, commit:c9c53cb55fd6e782c50f36da1e2adbf28111a660
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/eoan/+source/mutter/+bug/1841794
Bug: https://gitlab.gnome.org/GNOME/mutter/issues/815
---
clutter/clutter/clutter-actor.c | 2 ++
clutter/clutter/clutter-private.h | 2 ++
clutter/clutter/clutter-timeline.c | 2 +-
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 68c648f..b3e9946 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -19498,6 +19498,8 @@ transition_closure_free (gpointer data)
if (clutter_timeline_is_playing (timeline))
clutter_timeline_stop (timeline);
+ else if (clutter_timeline_get_delay (timeline) > 0)
+ clutter_timeline_cancel_delay (timeline);
/* remove the reference added in add_transition_internal() */
g_object_unref (clos->transition);
diff --git a/clutter/clutter/clutter-private.h b/clutter/clutter/clutter-private.h
index a34cae4..d1da84c 100644
--- a/clutter/clutter/clutter-private.h
+++ b/clutter/clutter/clutter-private.h
@@ -315,6 +315,8 @@ gboolean _clutter_run_progress_function (GType gtype,
gdouble progress,
GValue *retval);
+void clutter_timeline_cancel_delay (ClutterTimeline *timeline);
+
G_END_DECLS
#endif /* __CLUTTER_PRIVATE_H__ */
diff --git a/clutter/clutter/clutter-timeline.c b/clutter/clutter/clutter-timeline.c
index bb4f77f..88b76be 100644
--- a/clutter/clutter/clutter-timeline.c
+++ b/clutter/clutter/clutter-timeline.c
@@ -424,7 +424,7 @@ clutter_timeline_set_custom_property (ClutterScriptable *scriptable,
g_object_set_property (G_OBJECT (scriptable), name, value);
}
-static void
+void
clutter_timeline_cancel_delay (ClutterTimeline *timeline)
{
g_clear_handle_id (&timeline->priv->delay_id, g_source_remove);

View File

@ -0,0 +1,41 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Fri, 20 Sep 2019 16:28:22 +0200
Subject: clutter/timeline: Don't emit ::paused signal on delayed timelines
If a timeline is delayed and we request to stop or pause it, we are emitting
the "::paused" signal on it, however this has never been started, and so
nothing has really be paused.
So, just try to cancel the delay on pause and return if not playing.
No code in mutter or gnome-shell is affected by this, so it is safe to
change.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/805
Origin: upstream, commit:1e637bd7e1b2a4316d1cf6da80966d43819a10df
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/eoan/+source/mutter/+bug/1841794
Bug: https://gitlab.gnome.org/GNOME/mutter/issues/815
---
clutter/clutter/clutter-timeline.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/clutter/clutter/clutter-timeline.c b/clutter/clutter/clutter-timeline.c
index df7db16..bb4f77f 100644
--- a/clutter/clutter/clutter-timeline.c
+++ b/clutter/clutter/clutter-timeline.c
@@ -1214,11 +1214,11 @@ clutter_timeline_pause (ClutterTimeline *timeline)
priv = timeline->priv;
- if (priv->delay_id == 0 && !priv->is_playing)
- return;
-
clutter_timeline_cancel_delay (timeline);
+ if (!priv->is_playing)
+ return;
+
priv->msecs_delta = 0;
set_is_playing (timeline, FALSE);

View File

@ -0,0 +1,58 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Fri, 20 Sep 2019 16:13:03 +0200
Subject: clutter/timeline: Use a function to cancel the delay timeout
Avoid repeating the same code for canceling the delay timeout, using a
function for later uses.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/805
Origin: upstream, commit:63a0b702c94af013b94ad3f32a8c5ba86bf6dfba
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/eoan/+source/mutter/+bug/1841794
Bug: https://gitlab.gnome.org/GNOME/mutter/issues/815
---
clutter/clutter/clutter-timeline.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/clutter/clutter/clutter-timeline.c b/clutter/clutter/clutter-timeline.c
index 0c026eb..df7db16 100644
--- a/clutter/clutter/clutter-timeline.c
+++ b/clutter/clutter/clutter-timeline.c
@@ -424,6 +424,11 @@ clutter_timeline_set_custom_property (ClutterScriptable *scriptable,
g_object_set_property (G_OBJECT (scriptable), name, value);
}
+static void
+clutter_timeline_cancel_delay (ClutterTimeline *timeline)
+{
+ g_clear_handle_id (&timeline->priv->delay_id, g_source_remove);
+}
static void
clutter_scriptable_iface_init (ClutterScriptableIface *iface)
@@ -550,11 +555,7 @@ clutter_timeline_dispose (GObject *object)
priv = self->priv;
- if (priv->delay_id)
- {
- g_source_remove (priv->delay_id);
- priv->delay_id = 0;
- }
+ clutter_timeline_cancel_delay (self);
if (priv->progress_notify != NULL)
{
@@ -1216,11 +1217,7 @@ clutter_timeline_pause (ClutterTimeline *timeline)
if (priv->delay_id == 0 && !priv->is_playing)
return;
- if (priv->delay_id)
- {
- g_source_remove (priv->delay_id);
- priv->delay_id = 0;
- }
+ clutter_timeline_cancel_delay (timeline);
priv->msecs_delta = 0;
set_is_playing (timeline, FALSE);

View File

@ -8,7 +8,7 @@
Name: mutter
Version: 3.34.0
Release: 3%{?dist}
Release: 4%{?dist}
Summary: Window and compositing manager based on Clutter
License: GPLv2+
@ -21,6 +21,10 @@ Patch0: 0001-window-actor-Special-case-shaped-Java-windows.patch
# Fix xsettings/ibus-x11 initialization
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/792
Patch1: 792.patch
Patch2: clutter-timeline-Use-a-function-to-cancel-the-delay-timeo.patch
Patch3: clutter-timeline-Don-t-emit-paused-signal-on-delayed-time.patch
Patch4: clutter-actor-Cancel-delayed-timelines-on-removal.patch
BuildRequires: chrpath
BuildRequires: pango-devel
@ -165,6 +169,10 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
%{_datadir}/mutter-%{mutter_api_version}/tests
%changelog
* Thu Sep 27 2019 Kenneth Topp <toppk@bllue.org> - 3.34.0-4
- Backport a patch to prevent crash during animations
- See upstream issue https://gitlab.gnome.org/GNOME/mutter/issues/815
* Thu Sep 12 2019 Kalev Lember <klember@redhat.com> - 3.34.0-3
- Update previous patch to final upstream version