summaryrefslogtreecommitdiff
path: root/src/xfont.c
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2013-12-16 11:45:33 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2013-12-16 11:45:33 +0400
commit5ae356d99130af32b51a0cd67d1933ed9e6cd20e (patch)
tree4d68dfd538ce4a7ef56027218f5ec1582d5b73df /src/xfont.c
parent2013a2f955e4dc6edf9869767e9f5d70fbf9d69c (diff)
downloademacs-5ae356d99130af32b51a0cd67d1933ed9e6cd20e.tar.gz
emacs-5ae356d99130af32b51a0cd67d1933ed9e6cd20e.tar.bz2
emacs-5ae356d99130af32b51a0cd67d1933ed9e6cd20e.zip
* 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).
Diffstat (limited to 'src/xfont.c')
-rw-r--r--src/xfont.c5
1 files changed, 4 insertions, 1 deletions
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);