Mercurial > emacs
changeset 103250:3113546dd713
(x_delete_display): Don't call XrmDestroyDatabase here.
(x_delete_terminal): Dissociate resource database from display and
then call XrmDestroyDatabase before closing display.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Tue, 19 May 2009 00:26:46 +0000 |
parents | 019c8b2b5898 |
children | ed4e37cf73c3 |
files | src/xterm.c |
diffstat | 1 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xterm.c Mon May 18 17:08:19 2009 +0000 +++ b/src/xterm.c Tue May 19 00:26:46 2009 +0000 @@ -10613,13 +10613,6 @@ 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); @@ -10740,6 +10733,20 @@ 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