From 5ae356d99130af32b51a0cd67d1933ed9e6cd20e Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 16 Dec 2013 11:45:33 +0400 Subject: * font.c (valid_font_driver) [ENABLE_CHECKING]: New function intended to find bogus pointers in font objects (Bug#16140). * font.h (valid_font_driver) [ENABLE_CHECKING]: Add prototype. * alloc.c (cleanup_vector): Use valid_font_driver in eassert. (compact_font_cache_entry, compact_font_caches) [!HAVE_NTGUI]: Disable for MS-Windows due to Bug#15876; apparently this requires more or less substantial changes in fontset code. * xfont.c (xfont_close): * xftfont.c (xftfont_close): Call x_display_info_for_display to check whether 'Display *' is valid (Bug#16093 and probably Bug#16069). --- src/xfont.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/xfont.c') diff --git a/src/xfont.c b/src/xfont.c index d4d6ee7c10f..df69c9141bd 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -894,7 +894,10 @@ xfont_close (struct font *font) { struct xfont_info *xfi = (struct xfont_info *) font; - if (xfi->xfont) + /* This function may be called from GC when X connection is gone + (Bug#16093), and an attempt to free font resourses on invalid + display may lead to X protocol errors or segfaults. */ + if (xfi->xfont && x_display_info_for_display (xfi->display)) { block_input (); XFreeFont (xfi->display, xfi->xfont); -- cgit v1.2.3