diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2013-12-16 11:45:33 +0400 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2013-12-16 11:45:33 +0400 |
commit | 5ae356d99130af32b51a0cd67d1933ed9e6cd20e (patch) | |
tree | 4d68dfd538ce4a7ef56027218f5ec1582d5b73df /src/xfont.c | |
parent | 2013a2f955e4dc6edf9869767e9f5d70fbf9d69c (diff) | |
download | emacs-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.c | 5 |
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); |