changeset 103430:e00155c729b4

(x_delete_terminal): Put previous change in #if 0 and add comment explaining why.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Mon, 15 Jun 2009 10:49:59 +0000
parents 8f7555e94264
children f9ce528bce63
files src/xterm.c
diffstat 1 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Mon Jun 15 09:05:17 2009 +0000
+++ b/src/xterm.c	Mon Jun 15 10:49:59 2009 +0000
@@ -10747,7 +10747,18 @@
       /* 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 @@
 	 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);