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:
parent
31b0b839af
commit
a5399ece23
67
clutter-actor-Cancel-delayed-timelines-on-removal.patch
Normal file
67
clutter-actor-Cancel-delayed-timelines-on-removal.patch
Normal 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);
|
@ -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);
|
||||
|
@ -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);
|
10
mutter.spec
10
mutter.spec
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user