[gtk+] Add diagnostics for XID collisions



commit 6fc6b8b4e8d582bba6c409ede98b814e88bc2f66
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue May 5 19:29:05 2009 -0400

    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 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/gdk/x11/gdkxid.c b/gdk/x11/gdkxid.c
index 1d18b55..b4b46fe 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);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]