From 2cd78bffd90ed04295cd82f2b7e3e9c44b1511e9 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 24 Jan 2017 11:03:41 +0100 Subject: [PATCH] compositor: Avoid thaw on inconsistent effect_completed calls If the meta_window_actor_effect_completed() triggers inconsistent accounting, there's also high chances that the thaw call will be unexpected at this time too, which will lead to a g_error(). This makes mutter more lenient to effect_completed() calls of the right type (i.e. those triggering freeze/thaw) being performed more times than necessary in the upper parts. A warning will be issued, but the process won't abort. https://bugzilla.gnome.org/show_bug.cgi?id=777691 --- src/compositor/meta-window-actor.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index 6b1b3c3fa..2d2158fbd 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -1130,6 +1130,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, MetaPluginEffect event) { MetaWindowActorPrivate *priv = self->priv; + gboolean inconsistent = FALSE; /* NB: Keep in mind that when effects get completed it possible * that the corresponding MetaWindow may have be been destroyed. @@ -1146,6 +1147,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, { g_warning ("Error in minimize accounting."); priv->minimize_in_progress = 0; + inconsistent = TRUE; } } break; @@ -1156,6 +1158,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, { g_warning ("Error in unminimize accounting."); priv->unminimize_in_progress = 0; + inconsistent = TRUE; } } break; @@ -1170,6 +1173,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, { g_warning ("Error in map accounting."); priv->map_in_progress = 0; + inconsistent = TRUE; } break; case META_PLUGIN_DESTROY: @@ -1179,6 +1183,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, { g_warning ("Error in destroy accounting."); priv->destroy_in_progress = 0; + inconsistent = TRUE; } break; case META_PLUGIN_SIZE_CHANGE: @@ -1187,6 +1192,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, { g_warning ("Error in size change accounting."); priv->size_change_in_progress = 0; + inconsistent = TRUE; } break; case META_PLUGIN_SWITCH_WORKSPACE: @@ -1194,7 +1200,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self, break; } - if (is_freeze_thaw_effect (event)) + if (is_freeze_thaw_effect (event) && !inconsistent) meta_window_actor_thaw (self); if (!meta_window_actor_effect_in_progress (self))