From 1c6d1051f17696737000032498c108cf9d0fd114 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Tue, 19 May 2009 00:27:03 +0000 Subject: [PATCH] (x_delete_display): Don't call XrmDestroyDatabase here. (x_delete_terminal): Dissociate resource database from display and then call XrmDestroyDatabase before closing display. --- src/ChangeLog | 6 ++++++ src/xterm.c | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2518a8da077..4645317e94b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2009-05-19 YAMAMOTO Mitsuharu + + * 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 * nsterm.m (ns_read_socket): Remove unused variable. diff --git a/src/xterm.c b/src/xterm.c index f12250085ee..ec6c4d4011f 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -10613,13 +10613,6 @@ x_delete_display (dpyinfo) 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_delete_terminal (struct terminal *terminal) 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 -- 2.39.5