From 6fc6b8b4e8d582bba6c409ede98b814e88bc2f66 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 5 May 2009 19:29:05 -0400 Subject: [PATCH] Add diagnostics for XID collisions This should help with diagnosing crashes caused by over-eager XID reuse in Xlib, see bug 581526. --- gdk/x11/gdkxid.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gdk/x11/gdkxid.c b/gdk/x11/gdkxid.c index 1d18b557e0..b4b46fe05f 100644 --- a/gdk/x11/gdkxid.c +++ b/gdk/x11/gdkxid.c @@ -47,16 +47,19 @@ _gdk_xid_table_insert (GdkDisplay *display, gpointer data) { GdkDisplayX11 *display_x11; - + g_return_if_fail (xid != NULL); g_return_if_fail (GDK_IS_DISPLAY (display)); - + display_x11 = GDK_DISPLAY_X11 (display); if (!display_x11->xid_ht) display_x11->xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash, (GEqualFunc) gdk_xid_equal); + if (g_hash_table_lookup (display_x11->xid_ht, xid)) + g_warning ("XID collision, trouble ahead"); + g_hash_table_insert (display_x11->xid_ht, xid, data); } @@ -65,11 +68,11 @@ _gdk_xid_table_remove (GdkDisplay *display, XID xid) { GdkDisplayX11 *display_x11; - + g_return_if_fail (GDK_IS_DISPLAY (display)); - + display_x11 = GDK_DISPLAY_X11 (display); - + if (display_x11->xid_ht) g_hash_table_remove (display_x11->xid_ht, &xid); }