From 5e84c8f20b22cacad03974ee6186b1b2a25560f9 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Fri, 17 Oct 2014 08:58:28 -0400 Subject: [PATCH] MetaWindowActor: don't overwrite send_frame_messages_timer If the app finished multiple frames before we sent _NET_WM_FRAME_DRAWN, we could add the send_frame_messages_timer multiple times. In the rare case that the app immediately closed the window, the older timeout could potentially then run on the freed actor. https://bugzilla.gnome.org/show_bug.cgi?id=738686 --- src/compositor/meta-window-actor.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index 254a1a9d7..3d6fab163 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -939,6 +939,10 @@ static void queue_send_frame_messages_timeout (MetaWindowActor *self) { MetaWindowActorPrivate *priv = self->priv; + + if (priv->send_frame_messages_timer != 0) + return; + MetaDisplay *display = meta_window_get_display (priv->window); gint64 current_time = meta_compositor_monotonic_time_to_server_time (display, g_get_monotonic_time ()); MetaMonitorManager *monitor_manager = meta_monitor_manager_get ();