[mutter] window: Remove pending pings in unmanage
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Remove pending pings in unmanage
- Date: Tue, 8 Jul 2014 16:20:46 +0000 (UTC)
commit 82dce6758ace64116b6d89d59c2486cf96913c81
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Tue Jul 8 12:16:11 2014 -0400
window: Remove pending pings in unmanage
This makes sure that we see them for Wayland clients as well, and don't
time out and crash when we're accessing an invalid window / surface.
Spotted-by: Rui Matos <tiagomatos gmail com>
src/core/display-private.h | 3 +++
src/core/display.c | 18 ++++--------------
src/core/window.c | 2 ++
3 files changed, 9 insertions(+), 14 deletions(-)
---
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 03450d3..a847d9b 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -445,6 +445,9 @@ void meta_display_sanity_check_timestamps (MetaDisplay *display,
gboolean meta_display_timestamp_too_old (MetaDisplay *display,
guint32 *timestamp);
+void meta_display_remove_pending_pings_for_window (MetaDisplay *display,
+ MetaWindow *window);
+
MetaGestureTracker * meta_display_get_gesture_tracker (MetaDisplay *display);
#endif
diff --git a/src/core/display.c b/src/core/display.c
index 3d9d8ee..ac5120e 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -296,16 +296,9 @@ ping_data_free (MetaPingData *ping_data)
g_free (ping_data);
}
-/**
- * remove_pending_pings_for_window:
- * @display: The display the window appears on
- * @xwindow: The X ID of the window whose pings we should remove
- *
- * Frees every pending ping structure for the given X window on the
- * given display. This means that we also destroy the timeouts.
- */
-static void
-remove_pending_pings_for_window (MetaDisplay *display, Window xwindow)
+void
+meta_display_remove_pending_pings_for_window (MetaDisplay *display,
+ MetaWindow *window)
{
GSList *tmp;
GSList *dead;
@@ -318,7 +311,7 @@ remove_pending_pings_for_window (MetaDisplay *display, Window xwindow)
{
MetaPingData *ping_data = tmp->data;
- if (ping_data->window->xwindow == xwindow)
+ if (ping_data->window == window)
dead = g_slist_prepend (dead, ping_data);
}
@@ -1613,9 +1606,6 @@ meta_display_unregister_x_window (MetaDisplay *display,
g_return_if_fail (g_hash_table_lookup (display->xids, &xwindow) != NULL);
g_hash_table_remove (display->xids, &xwindow);
-
- /* Remove any pending pings */
- remove_pending_pings_for_window (display, xwindow);
}
void
diff --git a/src/core/window.c b/src/core/window.c
index d09e8d6..11f6fc8 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1272,6 +1272,8 @@ meta_window_unmanage (MetaWindow *window,
meta_stack_thaw (window->screen->stack);
}
+ meta_display_remove_pending_pings_for_window (window->display, window);
+
meta_window_shutdown_group (window); /* safe to do this early as
* group.c won't re-add to the
* group if window->unmanaging
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]