(x_delete_terminal): Put previous change in #if 0 and
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Mon, 15 Jun 2009 10:50:09 +0000 (10:50 +0000)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Mon, 15 Jun 2009 10:50:09 +0000 (10:50 +0000)
add comment explaining why.

src/ChangeLog
src/xterm.c

index cc5d3d6..8778474 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-15  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * xterm.c (x_delete_terminal): Put previous change in #if 0 and
+       add comment explaining why.
+
 2009-06-14  Sidney Markowitz <sidney@sidney.com>
 
        * nsmenu.m (EmacsTooltip: setText): set height of tooltip.
index 4c51626..e3d4611 100644 (file)
@@ -10747,7 +10747,18 @@ x_delete_terminal (struct terminal *terminal)
       /* Whether or not XCloseDisplay destroys the associated resource
         database depends on the version of libX11.  To avoid both
         crash and memory leak, we dissociate the database from the
-        display and then destroy dpyinfo->xrdb ourselves.  */
+        display and then destroy dpyinfo->xrdb ourselves.
+
+        Unfortunately, the above strategy does not work in some
+        situations due to a bug in newer versions of libX11: because
+        XrmSetDatabase doesn't clear the flag XlibDisplayDfltRMDB if
+        dpy->db is NULL, XCloseDisplay destroys the associated
+        database whereas it has not been created by XGetDefault
+        (Bug#21974 in freedesktop.org Bugzilla).  As a workaround, we
+        don't destroy the database here in order to avoid the crash
+        in the above situations for now, though that may cause memory
+        leaks in other situations.  */
+#if 0
 #ifdef HAVE_XRMSETDATABASE
       XrmSetDatabase (dpyinfo->display, NULL);
 #else
@@ -10757,6 +10768,7 @@ x_delete_terminal (struct terminal *terminal)
         some older versions of libX11 crash if we call it after
         closing all the displays.  */
       XrmDestroyDatabase (dpyinfo->xrdb);
+#endif
 
 #ifdef USE_GTK
       xg_display_close (dpyinfo->display);