]> code.delx.au - gnu-emacs/commitdiff
Another attempt to fix crashes due to prematurely freed faces
authorEli Zaretskii <eliz@gnu.org>
Mon, 28 Sep 2015 12:50:29 +0000 (15:50 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 28 Sep 2015 12:50:29 +0000 (15:50 +0300)
* src/xdisp.c (redisplay_internal): Inhibit freeing of realized
faces for as long as we might have desired matrices that reference
those faces.  (Bug#21428)

src/xdisp.c

index 2c38aa9ccff578d40bff57a0584042fd9744b027..863d891c2de64727c7a77e1dd6bf3cb047a54976 100644 (file)
@@ -13383,6 +13383,8 @@ redisplay_internal (void)
   pending = false;
   forget_escape_and_glyphless_faces ();
 
+  inhibit_free_realized_faces = false;
+
   /* If face_change, init_iterator will free all realized faces, which
      includes the faces referenced from current matrices.  So, we
      can't reuse current matrices in this case.  */
@@ -13871,6 +13873,10 @@ redisplay_internal (void)
       if (sf->fonts_changed)
        goto retry;
 
+      /* Prevent freeing of realized faces, since desired matrices are
+        pending that reference the faces we computed and cached.  */
+      inhibit_free_realized_faces = true;
+
       /* Prevent various kinds of signals during display update.
         stdio is not robust about handling signals,
         which can cause an apparent I/O error.  */