From e0862eda47c549850a43f09d12882849a2073f93 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 3 Apr 2018 08:24:10 -0700
Subject: [PATCH] Work around GC+Cairo bug

Workaround suggested by Robert Pluim (Bug#20890#13).
* src/ftfont.c (ftfont_close) [USE_CAIRO]:
Do nothing if GC is in progress.
---
 src/ftfont.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/ftfont.c b/src/ftfont.c
index 4382fd02211..bdb1dff8cb9 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1246,6 +1246,12 @@ ftfont_close (struct font *font)
   /* FIXME: Although this function can be called while garbage-collecting,
      the function assumes that Lisp data structures are properly-formed.
      This invalid assumption can lead to core dumps (Bug#20890).  */
+#ifdef USE_CAIRO
+  /* Although this works around Bug#20890, it is probably not the
+     right thing to do.  */
+  if (gc_in_progress)
+    return;
+#endif
 
   struct ftfont_info *ftfont_info = (struct ftfont_info *) font;
   Lisp_Object val, cache;
-- 
2.39.5