From: Eli Zaretskii Date: Mon, 28 Sep 2015 12:50:29 +0000 (+0300) Subject: Another attempt to fix crashes due to prematurely freed faces X-Git-Tag: emacs-25.0.90~1223^2~84 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a11ae01df93d32f4881908b1e6f07d6b908fe272;p=emacs.git Another attempt to fix crashes due to prematurely freed faces * 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) --- diff --git a/src/xdisp.c b/src/xdisp.c index 2c38aa9ccff..863d891c2de 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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. */