+2009-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xterm.c (x_delete_display): Don't call XrmDestroyDatabase here.
+ (x_delete_terminal): Dissociate resource database from display and
+ then call XrmDestroyDatabase before closing display.
+
2009-05-18 Adrian Robert <Adrian.B.Robert@gmail.com>
* nsterm.m (ns_read_socket): Remove unused variable.
tail->next = tail->next->next;
}
- /* Xt and GTK do this themselves. */
-#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
-#ifndef AIX /* On AIX, XCloseDisplay calls this. */
- XrmDestroyDatabase (dpyinfo->xrdb);
-#endif
-#endif
-
xfree (dpyinfo->x_id_name);
xfree (dpyinfo->x_dnd_atoms);
xfree (dpyinfo->color_cells);
x_destroy_all_bitmaps (dpyinfo);
XSetCloseDownMode (dpyinfo->display, DestroyAll);
+ /* 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. */
+#ifdef HAVE_XRMSETDATABASE
+ XrmSetDatabase (dpyinfo->display, NULL);
+#else
+ dpyinfo->display->db = NULL;
+#endif
+ /* We used to call XrmDestroyDatabase from x_delete_display, but
+ some older versions of libX11 crash if we call it after
+ closing all the displays. */
+ XrmDestroyDatabase (dpyinfo->xrdb);
+
#ifdef USE_GTK
xg_display_close (dpyinfo->display);
#else