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
|
@ -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
|
Name: mutter
|
||||||
Version: 3.34.0
|
Version: 3.34.0
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: Window and compositing manager based on Clutter
|
Summary: Window and compositing manager based on Clutter
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
|
@ -21,6 +21,10 @@ Patch0: 0001-window-actor-Special-case-shaped-Java-windows.patch
|
||||||
# Fix xsettings/ibus-x11 initialization
|
# Fix xsettings/ibus-x11 initialization
|
||||||
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/792
|
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/792
|
||||||
Patch1: 792.patch
|
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: chrpath
|
||||||
BuildRequires: pango-devel
|
BuildRequires: pango-devel
|
||||||
|
@ -165,6 +169,10 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
||||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||||
|
|
||||||
%changelog
|
%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
|
* Thu Sep 12 2019 Kalev Lember <klember@redhat.com> - 3.34.0-3
|
||||||
- Update previous patch to final upstream version
|
- Update previous patch to final upstream version
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue