summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2014-09-22 09:34:05 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2014-09-22 09:34:05 +0400
commitfc5ebc3f497a152132407d57a14cce147d59d29c (patch)
tree7b425f628ecbcf6561a1fbb5c4e5014f9cf3a3e9
parent63126683dbcf3ac507c3afd20ecbce88fb6e0fa4 (diff)
downloademacs-fc5ebc3f497a152132407d57a14cce147d59d29c.tar.gz
On OSX, do not free font-specific data more than once (Bug#18501).
* macfont.m (macfont_close): Release and free font-specific data only if it wasn't previously freed.
-rw-r--r--src/ChangeLog6
-rw-r--r--src/macfont.m31
2 files changed, 24 insertions, 13 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 684de498522..4d969d73279 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2014-09-22 Dmitry Antipov <dmantipov@yandex.ru>
+
+ On OSX, do not free font-specific data more than once (Bug#18501).
+ * macfont.m (macfont_close): Release and free font-specific data
+ only if it wasn't previously freed.
+
2014-09-21 David Caldwell <david@porkrind.org> (tiny change)
* unexmacosx.c (dump_it): Improve error message.
diff --git a/src/macfont.m b/src/macfont.m
index 1bb3fb14134..69bde9f66a7 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -2616,20 +2616,25 @@ static void
macfont_close (struct font *font)
{
struct macfont_info *macfont_info = (struct macfont_info *) font;
- int i;
- block_input ();
- CFRelease (macfont_info->macfont);
- CGFontRelease (macfont_info->cgfont);
- if (macfont_info->screen_font)
- CFRelease (macfont_info->screen_font);
- macfont_release_cache (macfont_info->cache);
- for (i = 0; i < macfont_info->metrics_nrows; i++)
- if (macfont_info->metrics[i])
- xfree (macfont_info->metrics[i]);
- if (macfont_info->metrics)
- xfree (macfont_info->metrics);
- unblock_input ();
+ if (macfont_info->cache)
+ {
+ int i;
+
+ block_input ();
+ CFRelease (macfont_info->macfont);
+ CGFontRelease (macfont_info->cgfont);
+ if (macfont_info->screen_font)
+ CFRelease (macfont_info->screen_font);
+ macfont_release_cache (macfont_info->cache);
+ for (i = 0; i < macfont_info->metrics_nrows; i++)
+ if (macfont_info->metrics[i])
+ xfree (macfont_info->metrics[i]);
+ if (macfont_info->metrics)
+ xfree (macfont_info->metrics);
+ macfont_info->cache = NULL;
+ unblock_input ();
+ }
}
static int